AsyncTask cancel(布尔)调用onPostExecute - ?

时间:2012-05-03 09:40:01

标签: android android-asynctask

  

可能重复:
  onPostExecute on cancelled AsyncTask

如果文档说它应该调用AsyncTask,为什么取消onPostExecute仍会调用onCancelled。 这是一个长期存在的错误吗?

在我的情况下,我cancel(true) asynctask,它完成doInBackground,然后调用onPostExecutes。 最后它会抛出一个

java.lang.InterruptedException

如果这是有意的行为,我是否可以将此Exception作为对象获取?

2 个答案:

答案 0 :(得分:1)

onPostExecute后应拨打onCancelled

答案 1 :(得分:1)

如果你从cancel()方法阅读文档,你会发现:

  

尝试取消执行此任务。如果这种尝试失败了   任务已经完成,已经取消,或者不能   因其他原因被取消。

调用cancel()会将isCancelled()设置为true。您是否定期在doInBackground中检查此方法的返回值?

   protected Object doInBackground(Object... x) {  
   while (/* condition */) { 
      // work...    
   if (isCancelled()) break; 
    }    
 return null;  } 

至于异常java.lang.InterruptedException,可能有多种原因。

我的猜测是你可能在错误的地方/时间调用cancel(),你可能不会在doInBackground中定期检查isCancelled(),所以任务完成并且onPostExecute () 叫做。