在单独的进程中运行的 Android Intent 服务不会自行停止

标签 android service android-intentservice

我创建了一个 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/

相关文章:

Android 应用程序连接到 wifi 打印机进行打印

android - 如何永久删除SD卡上的数据

android - SharedPreferences getLong() -> java.lang.String 无法转换为 java.lang.Long。怎么修?

.net - 判断 .Net 应用程序是作为服务还是作为应用程序运行?

linux - 服务不会在 Linux Boot 上启动

android - 多次调用 IntentService 的 startService 时 Intent 是否进入队列?

android - 表 td 显示 :block on Apple devices will not work

windows - 关于 WCF 服务总线

并行运行的 Android Intent Service 工作请求

java - 意向服务未启动