Android - 当asynctask被取消时会发生什么?

时间:2012-12-06 09:51:23

标签: android android-asynctask

AsncTask取消后会发生什么。

是否仍然调用onPostExecute()

2 个答案:

答案 0 :(得分:4)

答案是。如文档所述:

  

public final boolean cancel (boolean mayInterruptIfRunning)

     

调用此方法可确保onPostExecute(Object)永远不会   调用。调用此方法后,您应该检查该值   定期从doInBackground(Object [])返回isCancelled()   尽早完成任务。

答案 1 :(得分:3)

来自官方的java doc:

  

可以通过调用cancel(boolean)随时取消任务。   调用此方法将导致后续调用isCancelled()   返回true。 调用此方法后,改为onCancelled(Object)   之后将调用onPostExecute(Object)   doInBackground(Object [])返回。确保取消任务   你应该尽快检查返回值   如果可能的话,定期从doInBackground(Object [])获取isCancelled()   (例如在循环内部。)

方法java doc:

public final boolean cancel (boolean mayInterruptIfRunning)
  

尝试取消执行此任务。如果这种尝试失败了   任务已经完成,已经取消,或者不能   由于其他原因被取消。如果成功,这个任务就有了   调用cancel时未启动,此任务永远不会运行。如果   任务已经启动,然后是mayInterruptIfRunning参数   确定执行此任务的线程是否应该是   因试图停止任务而中断。

     

调用此方法将导致调用onCancelled(Object)   在doInBackground(Object [])返回后的UI线程上。 打电话给这个   方法保证永远不会调用onPostExecute(Object)。之后   调用此方法时,应检查返回的值   isCancelled()定期从doInBackground(Object [])来完成   尽早完成任务。