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

Android Intent Service to run in separate process does not stop itself

我创建了一个 intent 服务,可以下载一些文件,将其中一些写入外部存储,并将一些数据写入我应用程序的本地数据库

它工作正常,直到我意识到意图服务 运行 在我的应用程序的同一进程中。

我希望即使应用程序进程终止,服务也能完成它的工作。我注意到如果我终止我的进程,意图服务也会终止并且不会执行任务。

所以我读到我可以 运行 我在这里完成的单独流程中的意图服务

 <service
            android:name=".services.DownloadContentIntentService"
            android:process=":whatever"
            android:exported="false" />

现在任务 运行 在一个单独的进程中。如果我终止正在运行的应用程序,它仍然 运行s。

但是,我注意到任务完成后,意图服务不会自行终止。

即使我调用 stopSelf()。根据 Android Studio 的说法,它还活着。

发生了什么事?

感谢您的阅读。

Android 本质上是基于 Linux 的,因此应始终在该上下文中查看流程。现在,Service 由 Android 提供,但沙箱由 Linux 提供。而且,事情变得更加复杂,因为图片中还有JAVA,虚拟机使事情更加丰富。 stopSelf() 由服务执行并不意味着包含该服务的进程已被终止。要终止进程,您需要执行 SIGKILL 又名 kill -9

因此,即使服务已向 Android 发出 stopSelf() 的信号,Linux 仍可能决定让进程保持活动状态,尤其是因为在终止进程之前,资源需要GC。因此,stopSelf() 绝不等同于 SIGKILL,这实际上意味着您无法在 PS 列表(或 Android 的进程列表)中看到该服务) 立即