1

我在写一个使用AsyncTask来执行一些网络操作的服务。假设AsyncTask的doInBackground花费很长时间,并且在发生这种情况时,资源变少,操作系统关闭服务。服务关闭时的操作顺序

AsyncTask何时被杀死?当onDestroy被调用时AsyncTask是否还在运行,还是会在之后发生,还是我负责关闭AsyncTask?我试图确保我的onDestroy中的代码和doInBackground中的代码之间没有竞争条件。

+0

只是好奇,但你为什么在服务中使用AsyncTask? – Squonk

+1

服务运行在与主应用程序相同的进程中,所以我相信在这种情况下我需要使用AsyncTask,以便服务的网络访问不会阻塞主要的UI线程。 – lacker

+1

服务已在其自己的线程上运行。 AsyncTasks适用于活动 – Spidy

回答

2

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

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

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