如何结束AsyncTask onBackPress()并且如果它没有完成它仍然运行?

yos*_*i24 1 android

我在几个活动中使用AsyncTask.

我知道如何覆盖onBackPress().

但是当AsyncTask运行时,我想让用户能够返回,即使asynctask仍在运行.

我怎样才能做到这一点?

当启动它的活动在它完成之前关闭时,asynctask是否仍然运行?

Tor*_*rid 6

AsyncTasks会一直运行,直到完成或取消.因此,在您的情况下(用户按下Back并结束主要活动),AsyncTask将继续.

如果您确实希望从onBackPressed结束AsyncTask,那么您可以做的最好就是调用

myAsyncTask.cancel(true);
Run Code Online (Sandbox Code Playgroud)

但所有这一切都是调用任务onCancelled(),可以设置一个可以检查(通常)的取消标志doInBackground()- 如果设置了,任务可以返回.

请注意,使用cancel(true)不会停止任务.文档讨论了"中断"真实案例的任务,但它们的意思是在doInBackground运行时将调用onCancelled - 此时任务有机会设置doInBackground可以检查的标志.

对于真实情况,如果任务未实现onCancelled,和/或它没有设置/检查标志,则任务将完成doInBackground,但永远不会调用onPostExecute(Object) - 这相当于false情况.


Kni*_*edi 5

即使您的应用程序已关闭,异步任务也将继续运行.你必须要小心,因为只要你的任务仍在运行,你的任务就会泄漏你的上下文(保留在内存中),如果它有引用它(所以活动).您可以通过引用您的活动来避免这种情况WeakReference.

您可以使用cancel(true)停止正在运行的任务.取消将让任务完成doInBackground但永远不会打电话onPostExecute.您可以通过检查isCanceled()来中断后台例程,因此在任务被终止后返回更早.

我删了一半帖子!

我做了这么混乱中断与线程停止!使用truewill当然不会停止实际的线程.非常感谢Torid和他的回答证明我错了!大课程,谢谢你!