我创建了一个 intent 服务,它下载一些文件,将其中一些写入外部存储,并将一些数据写入我应用程序的本地数据库
在我意识到 Intent 服务在我的应用程序的同一进程中运行之前,它一直运行良好。
即使应用程序进程终止,我也希望服务能够完成它的工作。我注意到,如果我终止我的流程, Intent 服务也会终止并且不会执行任务。
所以我读到我可以在我在这里完成的单独进程中运行我的 Intent 服务
<service
android:name=".services.DownloadContentIntentService"
android:process=":whatever"
android:exported="false" />
现在任务在一个单独的进程中运行。如果我终止正在运行的应用程序,它仍然会运行。
但是,我注意到 Intent 服务在任务完成后不会自行终止。
即使我调用 stopSelf()。根据 Android Studio 的说法,它仍然存在。
发生了什么事?
感谢阅读。
最佳答案
Android 本质上是基于 Linux 的,因此应始终在该上下文中查看进程。现在,Service
由Android 提供,而沙箱由Linux 提供。而且,事情变得更复杂,因为图中还有JAVA,而虚拟机使事情更加丰富。服务执行 stopSelf()
绝不意味着包含该服务的进程被终止。要终止进程,您需要执行 SIGKILL
又名 kill -9
因此,即使服务已向 Android 发出 stopSelf()
信号,Linux 仍可能决定让进程保持 Activity 状态,尤其是因为在终止进程之前,需要对资源进行 GC。因此,stopSelf()
绝不等同于 SIGKILL
,这实际上意味着您无法在 PS
列表中看到该服务(或Android的进程列表)立即
关于在单独的进程中运行的 Android Intent 服务不会自行停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33876786/