我正在处理相当多的遗留AsyncTask代码,并且必须在我们的代码库中自己编写一些代码。但是,仔细阅读文档中的cancel()
方法让我感到很困惑。文档说:
尝试取消执行此任务。 如果,此尝试将失败 任务已经完成,已经取消,或者不能 因其他原因而被取消。如果成功,则此任务有 调用cancel时未启动,此任务永远不会运行。如果 任务已经开始,然后是
mayInterruptIfRunning
参数 确定执行此任务的线程是否应该是 因试图停止任务而中断。调用此方法将导致调用
onCancelled(Object)
在doInBackground(Object[])
返回后的UI线程上。打电话给这个 方法保证永远不会调用onPostExecute(Object)
。后 调用此方法时,应检查返回的值isCancelled()
定期从doInBackground(Object[])
完成 尽早完成任务。
因此,可能存在AsyncTask已完成并从doInBackground()
返回但在调用onPostExecute()
之前的情况,该任务已通过cancel()
取消,从而导致调用{{} 1}}无论如何。如果取消是从onPostExecute()
的{{1}}开始的,则可能会有危险。
此外,SO上的这个问题支持记录的取消行为:onPostExecute on cancelled AsyncTask
那么,我应该从现在开始onPause()
开始检查Activity
吗?
答案 0 :(得分:1)
那么,我应该在开始时检查if(isCanceled())吗? onPostExecute()从现在开始?
绝对没有,已经检查过了。
private void finish(Result result) {
if (isCancelled()) {
onCancelled(result);
} else {
onPostExecute(result);
}
mStatus = Status.FINISHED;
}
REF:AsyncTask.java