我正在使用 AndroidAsyncTask
来从服务器下载文件。下载文件时,我试图杀死 AsyncTask。
protected void onPostExecute(Void result) {
MyTask.cancel(true);
}
但它仍在运行(我可以从 Eclipse 的调试窗口中看到它)。如何杀死 AsyncTask?
我正在使用 AndroidAsyncTask
来从服务器下载文件。下载文件时,我试图杀死 AsyncTask。
protected void onPostExecute(Void result) {
MyTask.cancel(true);
}
但它仍在运行(我可以从 Eclipse 的调试窗口中看到它)。如何杀死 AsyncTask?
当 AsyncTask 完成运行时,将调用 onPostExecute()。线程会死。垃圾收集器会清理它。你不必做任何事情。你正在做的事情是多余的。
除此之外,调用“取消”会向线程发送和中断信号。如果您的进程可以被中断,它将停止阻塞并继续执行。然后,如果为真,则必须调用isCancelled()
该doInBackground()
方法并从该方法返回。isCancelled()
之后,onCanceled()
andonPostExecute()
将被调用,线程将像往常一样自行死亡。
这里有一些关于取消的文档AsyncTask
,这可能是相关的:
可以通过调用随时取消任务
cancel(boolean)
。调用此方法将导致后续调用
isCancelled()
返回 true。调用此方法后,将在返回后调用
onCancelled(Object)
, 而不是。onPostExecute(Object)
doInBackground(Object[])
为确保尽快取消任务,您应始终
isCancelled()
定期检查 from的返回值doInBackground(Object[])
,如果可能的话(例如在循环内。)"