3

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

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

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

4

2 回答 2

3

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

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

于 2012-08-21T13:55:54.950 回答
2

这里有一些关于取消的文档AsyncTask,这可能是相关的:

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

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

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

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

于 2012-08-21T14:22:50.267 回答