我正在编写一个使用 AsyncTask 执行某些网络操作的服务。假设 AsyncTask 的 doInBackground 花费了很长时间,当发生这种情况时,资源变少并且操作系统正在关闭服务。
AsyncTask 什么时候被杀死?当 onDestroy 被调用时,AsyncTask 是否仍在运行,或者它会在之后发生,还是我负责关闭 AsyncTask?我试图确保我的 onDestroy 中的代码和我的 doInBackground 中的代码之间没有竞争条件。
最佳答案
AsyncTask 将继续运行,直到您取消它或系统销毁托管它的进程。系统本身并不知道您的 AsyncTask,因此在关闭服务时不会对此做任何事情,它当然不知道服务创建了 AsyncTask。
很可能在调用 onDestroy 之后,应用程序的进程也将被销毁,AsyncTask 也将被销毁。但是,最安全的策略是主动取消 onDestroy 中的 AsyncTask。
一个可能有趣的旁注是,如果进程在处理之前死亡,则排队等待处理的请求将会丢失。因此,发送到 AsyncTask 的任何必须完成的操作都需要写入持久任务日志,以便在未完成时重新发出它们。
关于android - 服务关闭时的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6528793/