完成AsyncTask
时可以取消onPostExecute()
吗?
或者,一旦doInBackground()
完成,任务就不能再被取消了吗?
答案 0 :(得分:5)
根据我的理解,该任务仅在doInBackground()
状态下运行,onPostExecute()
表示任务已完成且无法取消。
cancel()
尝试取消执行此任务。如果任务已经完成,已经取消或由于某些其他原因无法取消,则此尝试将失败。如果成功,并且在调用cancel时此任务尚未启动,则此任务永远不会运行。如果任务已经启动,则mayInterruptIfRunning
参数确定执行此任务的线程是否应该在尝试停止任务时被中断。
调用此方法将导致在onCancelled(Object)
返回后在UI线程上调用doInBackground(Object[])
。调用此方法可确保永远不会调用onPostExecute(Object)
。调用此方法后,您应该定期检查isCancelled()
从doInBackground(Object[])
返回的值,以尽早完成任务。
答案 1 :(得分:1)
覆盖onCanceled()
方法,请参阅以下示例代码:
private class UpdateTask extends AsyncTask<Void, Void, Void> {
private boolean running = true;
@Override
protected void onCancelled() {
running = false;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
onUpdate();
}
@Override
protected Void doInBackground(Void... params) {
while(running) {
publishProgress();
}
return null;
}
}