[英]Pause and Resume AsyncTasks? (Android)
我有一個AsyncTask
,它充當游戲的倒數計時器。 完成倒數計時后,它會顯示超時屏幕,並更新屏幕上顯示的計時器。 一切正常,除了在按下游戲中的暫停按鈕時我需要能夠暫停並繼續執行此操作。
如果我取消它並嘗試重新執行它,它將崩潰,並IllegalStateException
。 如果我取消它並在其位置實例化一個新的AsyncTask,則舊的將再次運行,而新的AsyncTask將同時運行。
是否可以使用AsyncTask
取消/暫停計時器並重新啟動計時器,或者我應該采用其他方式執行此操作?
編輯:
這是我為解決方案所做的:
mhandler = new Handler();
mtimerTask = new Runnable(){
public void run(){
mtimer -= 1;
if(mtimer == 0)
{
mhandler.removeCallbacks(this);
}
mhandler.postDelayed(this, 1000);
}
};
mhandler.removeCallbacks(mtimerTask);
mhandler.post(_timerTask)`
不知道這是否是最好的解決方法,但這對我有用。
我有一個AsyncTask,它充當游戲的倒數計時器。
那不是AsyncTask
的好用法。 AsyncTasks
應該可以完成工作,而不是閑逛。 對於倒數計時器,請使用postDelayed()
-您甚至不需要后台線程。 或者,使用CountDownTimer
。
如果我取消它並嘗試重新執行它,它會崩潰並拋出IllegalStateException。
該文檔指出:“該任務只能執行一次(如果嘗試第二次執行,則將引發異常。)”
你好
這是暫停AsyncTask的另一個骯臟的解決方案,對我有用。
但這並不是真正的干凈代碼。 在擴展AsyncTask的類中執行此操作。
public void pause()
{
this.isPaused = true;
}
public void resume()
{
this.isPaused = false;
}
@Override
protected Void doInBackground(Void... params)
{
while(!isCancelled())
{
while(isPaused)
sleep(5000);
//...
private void sleep(long sleepDuration)
{
try
{
Thread.sleep(sleepDuration);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
對於JaySS,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.