[英]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.