0

我想每隔几分钟运行一次后台 AsycTask。我创建了一个计时器并执行后台任务的 .execute 命令。我还创建了一个isChecking在 BackgroundNotify 运行时为 true 的 bool。问题是我仍然收到以下错误:

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)

我究竟做错了什么?

4

2 回答 2

6

AsyncTask 只能执行一次。如果您需要再次执行任务,请创建一个新实例,然后调用execute()它:

if (task.getStatus() == AsyncTask.Status.FINISHED) {
    task = new AsyncTask();
}

if (task.getStatus() != AsyncTask.Status.RUNNING) {
    task.execute();
}
于 2013-01-26T14:23:20.030 回答
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 
}
于 2013-01-26T14:25:40.887 回答