android:cancel(true)不会终止异步任务

android:cancel(true)不会终止异步任务,android,android-asynctask,kill,Android,Android Asynctask,Kill,我使用安卓AsyncTask从服务器下载文件。下载文件时,我正试图终止异步任务 protected void onPostExecute(Void result) { MyTask.cancel(true); } 但是它仍然在运行(我可以在eclipse的调试窗口中看到它)。 如何终止AsyncTask?当AsyncTask完成运行时,将调用onPostExecute()。线会死的。垃圾收集器会把它清理干净。你什么都不用做。你所做的是多余的 除此之外,调用“Cancel”会向线程发送中

我使用安卓
AsyncTask
从服务器下载文件。下载文件时,我正试图终止异步任务

protected void onPostExecute(Void result) {
    MyTask.cancel(true);
}
但是它仍然在运行(我可以在eclipse的调试窗口中看到它)。
如何终止AsyncTask?

当AsyncTask完成运行时,将调用onPostExecute()。线会死的。垃圾收集器会把它清理干净。你什么都不用做。你所做的是多余的


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

有一些关于取消
异步任务的文档,可能与此相关:

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

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

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

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


可能与和其他线程重复。但即使在调用onPostExecute()之后,线程也始终在运行:Thread[AsyncTask#1](正在运行)@user1471575是的,因为创建新线程比拥有空闲线程更昂贵。您不必担心这一点。@zapl:但我将拥有:Thread[AsyncTask#1](正在运行),线程[AsyncTask#2](正在运行)…这样可以吗?线程有一种倾向,会一直存在,直到GC决定收集它们。如果它们只是在应用程序的整个过程中不断生成,而从未被收集,则可能意味着某种内存泄漏。深入测试应用程序,以确定它们是否被收集。检查.AsyncTasks是否由执行器t执行HAT试图重新使用线程。对于其他API级别,这种行为是不同的,但是您应该考虑为您管理的实际线程,而不是试图手动停止它(如果您设法中断它,您可以这样做)。。以后,请不要只在此处复制粘贴文档。相反,请将该文档链接为注释,以便在文档发生更改时,您的帖子不会过期。