我在几个活动中使用AsyncTask。
我知道如何覆盖onBackPress()。
但是当AsyncTask正在运行时,我想让用户能够返回,即使asynctask仍在运行。
我该怎么做?
当启动它的活动在它完成之前关闭时,asynctask是否仍然运行?
答案 0 :(得分:6)
AsyncTasks一直运行直到完成或取消。因此,在您的情况下(用户按下Back并结束主要活动),AsyncTask将继续。
如果您确实希望从onBackPressed结束AsyncTask,那么您可以做的最好就是调用
myAsyncTask.cancel(true);
但所有这一切都是调用任务的onCancelled()
,它可以设置一个取消标志,可以(通常)在doInBackground()
中进行检查 - 如果设置了,任务就可以返回。
请注意,使用cancel(true)不会停止任务。文档讨论了“中断”真实案例的任务,但它们的意思是在doInBackground运行时将调用onCancelled - 此时任务有机会设置doInBackground可以检查的标志。
对于真实情况,如果任务没有实现onCancelled,和/或它没有设置/检查标志,那么任务将完成doInBackground,但是永远不会调用onPostExecute(Object) - 这相当于false的情况
答案 1 :(得分:5)
即使您的应用程序已关闭,异步任务也将继续运行。你必须要小心,因为只要你的任务仍在运行,你的任务就会泄漏你的上下文(保留在内存中),如果它有引用它(所以活动)。您可以通过WeakReference
引用您的活动来避免这种情况。
您可以使用cancel(true)停止正在运行的任务。取消将让任务完成doInBackground
但永远不会调用onPostExecute
。您可以通过检查isCanceled()来中断您的后台例程,因此在任务被终止后返回更早。
我删除了一半帖子!
我这样做会让线程停止混乱!使用true
当然会 NOT 停止实际线程。非常感谢Torid和他的answer,这证明我错了!大课程,谢谢你!