服务关闭时的操作顺序

时间:2011-06-30 00:28:37

标签: android thread-safety android-asynctask android-service android-lifecycle

我正在编写一个使用AsyncTask进行网络操作的服务。假设AsyncTask的doInBackground需要很长时间,而且当发生这种情况时,资源会变低并且操作系统正在关闭服务。

AsyncTask什么时候被杀?调用onDestroy时AsyncTask是否仍在运行,或者之后是否会发生,或者我是否负责关闭AsyncTask?我正在努力确保我的onDestroy中的代码与doInBackground中的代码之间没有竞争条件。

1 个答案:

答案 0 :(得分:2)

AsyncTask将继续运行,直到您取消它或系统销毁托管它的进程。系统本身并不知道你的AsyncTask,因此在关闭服务时它不会对它做任何事情,它肯定不知道服务创建了AsyncTask。

很可能在调用onDestroy之后,应用程序的进程也将被销毁,AsyncTask也将被销毁。但是,最安全的策略是主动并取消onDestroy中的AsyncTask。

一个可能有趣的旁注是,如果进程在处理之前死亡,那么排队等待处理的请求将会丢失。因此,发送到必须的AsyncTask的任何操作都需要写入持久性任务日志,以便在未完成时重新发布。