完成时可以AsyncTask
取消onPostExecute()
吗?
还是任务一旦doInBackground()
完成就不能再取消了?
据我了解,任务仅在doInBackground()
状态下运行,onPostExecute()
意味着任务已完成且无法取消。
cancel()
尝试取消此任务的执行。如果任务已完成、已被取消或由于其他原因无法取消,则此尝试将失败。如果成功,并且在调用取消时此任务尚未启动,则此任务不应该运行。如果任务已经开始,则该mayInterruptIfRunning
参数确定是否应该中断执行该任务的线程以尝试停止该任务。
调用此方法将导致返回onCancelled(Object)
后在 UI 线程上调用。doInBackground(Object[])
调用此方法可确保onPostExecute(Object)
永远不会调用该方法。调用此方法后,应isCancelled()
定期检查 from的返回值,doInBackground(Object[])
以尽早完成任务。
覆盖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;
}
}