2012-08-28 52 views
1

我有一個進度對話框,在某些運行動作中顯示。僅在有限/固定時間內隱藏進度對話框

如果該動作在給定時間內沒有執行,我想關閉對話框和動作。我如何實現這一點?

我現在有這兩種方法,其中停止和啓動我的異步操作和對話:

private void startAction() 
{ 
    if (!actionStarted) { 
     showDialog(DIALOG_ACTION); 
     runMyAsyncTask(); 
     actionStarted = true; 
    } 
} 

private void stopAction() 
{ 
    if (actionStarted) { 
     stopMyAsyncTask(); 
     actionStarted = false; 
     dismissDialog(DIALOG_ACTION); 
    } 
} 

即我想要做這樣的事情時,時間是出:

onTimesOut() 
{ 
    stopAction(); 
    doSomeOtherThing(); 
} 
+0

使用的TimerTask它會讓你的生活更輕鬆。 在固定時間後運行一項任務,如果在給定時間內沒有啓動,該任務將取消異步任務。 –

回答

1

你可以做一個簡單的計時器:

Timer timer = new Timer(); 
TimerTask task = new TimerTask() { 

    @Override 
    public void run() { 
     stopAction(); 
    } 
}; 

timer.schedule(task, 1000); 
+0

對不起。忘了補充一點,我的異步行爲可以在時間結束之前停止。然後我需要取消我的計時器。是否足以簡單地在stopAction()方法中取消它? – Ksice

+0

在你的asyncTask的postExecute中,你可以調用timer.cancel(); – AlexMok

1

我想你應該使用ThreadTimerTask。暫停X秒,然後如果您的任務尚未完成,請強制完成並關閉對話框。

這樣一個實現可以是:

private void startAction() { 
    if (!actionStarted) { 
     actionStarted = true; 
     showDialog(DIALOG_ACTION); //This android method is deprecated 
     //You should implement your own method for creating your dialog 
     //Run some async worker here... 
     TimerTask task = new TimerTask() { 
      public void run() { 
       if (!actionFinished) { 
        stopAction(); 
        //Do other stuff you need... 
       } 
      } 
     }); 
     Timer timer = new Timer(); 
     timer.schedule(task, 5000); //will be executed 5 seconds later 
    } 
} 

private void stopAction() { 
    if (!actionFinished) { 
     //Stop your async worker 
     //dismiss dialog 
     actionFinished = true; 
    } 
}