2

可能重复:
取消 AsyncTask 上的 onPostExecute

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

在我的情况下,它cancel(true)是异步任务,它完成doInBackground然后调用 onPostExecutes。最后它抛出一个

java.lang.InterruptedException

如果这是有意的行为,我可以把它Exception作为一个对象吗?

4

2 回答 2

1

之后onPostExecute应该是电话onCancelled

于 2012-05-03T09:47:29.850 回答
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()。

于 2012-05-03T10:08:25.593 回答