触发onPostExecute后无法执行AsyncTask

时间:2017-06-23 15:35:40

标签: android multithreading android-asynctask

我有一个扩展AsyncTask的课程。我使用Interface来获取我班级的onPostExecute()的结果,它运行正常。问题是当我从执行的任务中获得结果时(意味着当前任务已完成)我需要通过该类的相同实例执行另一个任务但是我收到此错误:

    java.lang.IllegalStateException: Cannot execute task: the task is already running

问题在哪里,我该如何解决?为什么以前的任务还活着?

2 个答案:

答案 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抛出异常的行。