AsyncTask:我应该在onPostExecute()中检查isCanceled()吗?

时间:2017-08-30 10:26:07

标签: android android-asynctask

我正在处理相当多的遗留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吗?

1 个答案:

答案 0 :(得分:1)

  

那么,我应该在开始时检查if(isCanceled())吗?   onPostExecute()从现在开始?

绝对没有,已经检查过了。

  private void finish(Result result) {
        if (isCancelled()) {
            onCancelled(result);
        } else {
            onPostExecute(result);
        }
        mStatus = Status.FINISHED;
    }

REF:AsyncTask.java