AsyncTask
在完成 onPostExecute()
方法时可以被取消吗?或者说一旦 doInBackground()
方法完成,任务就不能再被取消了吗?
AsyncTask
在完成 onPostExecute()
方法时可以被取消吗?或者说一旦 doInBackground()
方法完成,任务就不能再被取消了吗?
doInBackground()
状态下运行,当任务完成且无法取消时,才会在 onPostExecute()
中执行。
cancel()
尝试取消此任务的执行。如果任务已经完成、已经被取消或由于某些其他原因无法取消,则此尝试将失败。 如果成功,并且在调用 cancel 时此任务尚未启动,则此任务不应该运行。如果任务已经启动,则 mayInterruptIfRunning
参数确定是否中断执行此任务的线程,以尝试停止该任务。onCancelled(Object)
,在 doInBackground(Object[])
返回后。调用此方法保证永远不会调用 onPostExecute(Object)
。 在调用此方法后,您应定期从 doInBackground(Object[])
检查由 isCancelled()
返回的值,以尽早完成任务。请重写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;
}
}