如果文档说它应该调用AsyncTask
,为什么取消onPostExecute
仍会调用onCancelled
。
这是一个长期存在的错误吗?
在我的情况下,我cancel(true)
asynctask,它完成doInBackground
,然后调用onPostExecutes。
最后它会抛出一个
java.lang.InterruptedException
如果这是有意的行为,我是否可以将此Exception
作为对象获取?
答案 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 () 叫做。