我想每隔几分钟运行一次后台ASycTask。我创建了一个计时器,然后执行后台任务的.execute命令。我还创建了一个bool isChecking
,它在BackgroundNotify运行时为true。问题是我仍然收到以下错误:
01-26 15:09:32.871: E/AndroidRuntime(22332): FATAL EXCEPTION: Timer-0
01-26 15:09:32.871: E/AndroidRuntime(22332): java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)
01-26 15:09:32.871: E/AndroidRuntime(22332): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:578)
01-26 15:09:32.871: E/AndroidRuntime(22332): at android.os.AsyncTask.execute(AsyncTask.java:534)
01-26 15:09:32.871: E/AndroidRuntime(22332): at de.tecfriends.vbtsplash2013.MainActivity$2.run(MainActivity.java:61)
01-26 15:09:32.871: E/AndroidRuntime(22332): at java.util.Timer$TimerImpl.run(Timer.java:284)
我做错了什么?
答案 0 :(得分:6)
AsyncTask只能执行一次。如果您需要再次执行任务,请创建一个新实例,然后在其上调用execute()
:
if (task.getStatus() == AsyncTask.Status.FINISHED) {
task = new AsyncTask();
}
if (task.getStatus() != AsyncTask.Status.RUNNING) {
task.execute();
}
答案 1 :(得分:1)
在日志中:
llegalStateException:无法执行任务:任务已经执行 执行(任务只能执行一次)
表示您正在尝试启动已在运行的ASycTask。在使用AsyncTask.Status开始之前,您需要检查ASycTask是否正在运行:
if(your_AsyncTask.getStatus() == AsyncTask.Status.RUNNING){
// My AsyncTask is running
}
if(your_AsyncTask.getStatus() == AsyncTask.Status.FINISHED){
// My AsyncTask is FINISHED . start here again
}