我有一个搜索任务,当第二次点击该按钮时,它会取消当前正在运行的任务并重新创建它。
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)
我错过了什么吗?我是否需要等到原始实例被取消()?
答案 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);
}
这解决了我的问题。你可能想试一试......?