android - 服务关闭时的操作顺序

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

我正在编写一个使用 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/

相关文章:

java - 从 java 中的 ScheduledThreadPoolExecutor --> ExecutorService 滴下中断(kill -15 或 9)信号(Ctrl + C)

android - 在 Activity 中两次显示进度对话框是否有问题?

android - 如何从 Assets 中异步加载大量文件?

android - 如何连接 CameraUpdate 动画

java - 如何从不同的类访问变量

android - 如何在 GLWallpaper 服务中加载资源或 Assets

C++ 从两个线程访问 Int 变量。线程安全?

c# - 在 C# 中从线程更新 UI 的其他方法

java - 当 AsyncTask 也使用另一个线程时如何设置延迟时间?

android - 查找Audio.Media项的路径