我正在使用Android AsyncTask
来从服务器下载文件。下载文件时,我试图杀死AsyncTask。
protected void onPostExecute(Void result) {
MyTask.cancel(true);
}
但它仍在运行(我可以在eclipse的Debug窗口中看到它)。 如何杀死AsyncTask?
答案 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[])
的返回值,如果可能的话(例如在循环内)。“