我有一个搜索任务,当再次单击该按钮时,它将取消当前正在运行的任务并重新创建它。
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)
我想念什么吗?我需要等到原始实例isCancelled()吗?
最佳答案
最近,我遇到了一个奇怪的问题,即从后台恢复时,它以类似的异常轰炸,而任务在到达后台时已在运行一半。我改用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);
}
这解决了我的问题。您可能要试一试...?