2013-06-19 119 views
0

如果我有一个AsyncTask无限期地运行,并且Android决定需要终止该任务,或者释放内存或者因为设备正在进入睡眠模式(用户按下电源按钮),那么是否AsyncTask中的某种方式可以从操作系统获得即将被杀死的通知,以便采取行动来完成任何未完成的任务?当Android杀死一个AsyncTask时检测

+0

这不能回答我的问题。我的问题不是关于行动的时间长短。这是关于检测线程的杀死。 – AndroidDev

+0

你无法检测到线程被杀死,也许这个回调会有帮助:'''Application.onLowMemory()''' –

+0

如何使用AsyncClass.isCancelled() - 如果这个任务在正常完成之前被取消,则返回true OR AsyncClass.cancel(boolean) - 尝试取消执行此任务? – AndiM

回答

1

为了给你一个简单的答案:

只要一个的AsyncTask生活的过程中它是联系在一起的生活。如果它的进程仍在运行(即使在后台运行),OS永远不会终止AsyncTask。

另请注意,AsyncTask独立于启动它的Activity运行。该活动可能会被销毁,AsyncTask依然存在,直到该进程被销毁。

编辑 您需要调用doInBackground()方法内的isCancelled()以确保操作系统销毁AsyncTask时,doInBackground完成,以便执行onCancelled()方法。

所以总结一下:在doInBackground方法中总是检查isCancelled布尔函数。如果它返回true,则从doInBackground返回。自动执行onCancelled函数,而不是onPostExecute。在那里,你可以放置你想要执行的代码,在它死之前。

+1

我不相信那是真的。操作系统肯定会杀死任何它认为必要的东西,即使是在恶劣条件下的前台服务。如果操作系统能够杀死前台服务,那么对于销毁AsyncTask肯定不会再三思。 – AndroidDev

+0

在“恶劣条件下”它会杀死整个过程。它不能单独杀死AsyncTask。 –

+0

另外,您应该保留对AsyncTask的引用,并在需要知道它是否仍然存在时进行检查。 –