我有一个扩展AsyncTask
的课程。我使用Interface来获取我班级的onPostExecute()
的结果,它运行正常。问题是当我从执行的任务中获得结果时(意味着当前任务已完成)我需要通过该类的相同实例执行另一个任务但是我收到此错误:
java.lang.IllegalStateException: Cannot execute task: the task is already running
问题在哪里,我该如何解决?为什么以前的任务还活着?
答案 0 :(得分:2)
来自docs
启动HONEYCOMB,任务返回
being executed on a single thread
以避免由并行引起的常见应用程序错误 执行。
因此,一旦线程启动,您就无法再次启动它,只需创建任务的新对象并应用exexute
execute
在内部调用executeOnExecutor
public final AsyncTask<Params, Progress, Result> execute(Params... params) {
return executeOnExecutor(sDefaultExecutor, params);
}
和executeOnExecutor
docs
抛出:
java.lang.IllegalStateException如果getStatus()返回 AsyncTask.Status.RUNNING或AsyncTask.Status.FINISHED。
答案 1 :(得分:1)
您不能重复使用相同的AsyncTask
对象。创建一个新的:
CustomAsyncTask task = new CustomAsyncTask();
task.execute("");
...
// This will result in crash
// task.execute("");
task = new CustomAsyncTask();
// This is ok
task.execute("");
Here's抛出异常的行。