我创建了一个意图服务,可以下载一些文件,将其中一些文件写入外部存储,并将一些数据写入我的应用程序的本地数据库
在我意识到意图服务运行在我的应用程序的同一个过程之前,它一直运行得很好。
我希望服务完成它的工作,即使应用程序进程终止。我注意到,如果我终止我的进程,意图服务也会死掉,而不会完成任务。
所以我读到,我可以在一个单独的过程中运行我的意图服务,这是我在这里所做的。
<service
android:name=".services.DownloadContentIntentService"
android:process=":whatever"
android:exported="false" />现在,任务在一个单独的进程中运行。如果我终止正在工作的应用程序,它仍然会运行。
但是,我注意到,意图服务在任务完成后不会自行终止。
即使当我调用stopSelf()时也是如此。根据Android的说法,它还活着。
这是怎么回事?
感谢您的阅读。
发布于 2015-11-23 17:26:24
Android本质上是基于Linux的,因此应该始终在这种背景下查看进程。现在,Service由Android提供,而沙箱则由Linux提供。而且,事情变得更加复杂,因为图片中也有JAVA,而虚拟机更需要更多的东西。服务的stopSelf()并不意味着包含该服务的进程被终止。要杀死一个进程,您需要执行SIGKILL aka kill -9
因此,即使该服务已经为stopSelf()发出了Android的信号,Linux仍可能决定保持进程的存活,特别是因为在终止进程之前,资源必须是GCed。因此,stopSelf()绝不等同于SIGKILL,这实际上意味着您无法立即在PS列表(或PS的进程列表)中看到服务。
https://stackoverflow.com/questions/33876786
复制相似问题