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