android:cancel(true)不会杀死AsyncTask

时间:2012-08-21 13:52:51

标签: android android-asynctask kill

我正在使用Android AsyncTask来从服务器下载文件。下载文件时,我试图杀死AsyncTask。

protected void onPostExecute(Void result) {
    MyTask.cancel(true);
}

但它仍在运行(我可以在eclipse的Debug窗口中看到它)。 如何杀死AsyncTask?

2 个答案:

答案 0 :(得分:3)

当AsyncTask完成运行时,将调用onPostExecute()。线程将死亡。垃圾收集器将清理它。你不需要做任何事情。你正在做的事情是多余的。

除此之外,调用“Cancel”会向线程发送并中断信号。如果您的进程可能被中断,它将停止阻塞并继续执行。然后,您必须在isCancelled()中致电doInBackground(),如果isCancelled()为真,则从方法返回。在此之后,onCanceled()onPostExecute()将被调用,线程将像往常一样自行死亡。

答案 1 :(得分:2)

here提供了一些关于取消AsyncTask的文件,可能是相关的:

  

可以随时通过调用cancel(boolean)取消任务。

     

调用此方法将导致对isCancelled()的后续调用返回true。

     

调用此方法后,onCancelled(Object)将在onPostExecute(Object)返回后调用,而不是doInBackground(Object[])

     

为了确保尽快取消任务,您应该始终从isCancelled()定期检查doInBackground(Object[])的返回值,如果可能的话(例如在循环内)。“