调用重新实例化的异步任务失败并且“任务已经执行”

时间:2012-09-11 23:23:10

标签: java android android-asynctask

我有一个搜索任务,当第二次点击该按钮时,它会取消当前正在运行的任务并重新创建它。

if (_searchAsyncTask != null) {
    // cancel if already running
    _searchAsyncTask.cancel(true);
}
_searchAsyncTask = new SearchAsyncTask(this);
_searchAsyncTask.execute(data);

这在上面代码的最后一行失败,好像我再次调用了原始的异步任务。

java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)

我错过了什么吗?我是否需要等到原始实例被取消()?

1 个答案:

答案 0 :(得分:2)

最近我遇到了一个奇怪的问题,当它从后台恢复时它被一个类似的异常轰炸,并且当它进入后台时任务已经中途运行了。我转而使用AsyncTask.executeOnExecutor来修复此问题(某些代码可能是多余的):

if (_searchAsyncTask == null) {
    _searchAsyncTask = new SearchAsyncTask();
}

if (mThreadExecutor != null && !mThreadExecutor.isShutdown()) {
    mThreadExecutor.shutdownNow();
}

if (mThreadExecutor == null || mThreadExecutor.isShutdown()) {
    mThreadExecutor = Executors.newSingleThreadExecutor();
}

if (_searchAsyncTask.getStatus() != Status.RUNNING) {
    _searchAsyncTask.executeOnExecutor(mThreadExecutor);
}

这解决了我的问题。你可能想试一试......?