杀死应用与杀死服务

时间:2011-09-07 21:30:49

标签: android

我正在使用ActivityManager.killBackgroundProcesses()按包名杀死进程。在我杀死不使用服务的应用程序(例如Calculator)之前,我可以看到TaskKiller中列出的应用程序,在使用killBackgroundProcesses之后,我看不到图标。使用服务的应用程序我遇到了麻烦。即使我杀了它,我仍然可以在TaskKiller中看到它。我假设它是因为使用START_STICKY的服务但是如何阻止它重新启动?您可以使用TaskKiller来终止服务(它需要一个额外的步骤,但它可以工作,所以它是可能的!)。如果我试图杀死Pandora,例如音乐将停止播放,但是当我打开TaskKiller时,我仍然可以看到服务正在运行。

我正在使用循环搜索所有正在运行的进程,如下所示:

for(RunningAppProcessInfo info:activityManager.getRunningAppProcesses()){

当我找到我正在寻找的进程时,我使用了killBackgroundProcesses。 如果我杀死没有服务的应用程序,我可以通过循环看到它不再出现在循环中。当我用服务杀死一个应用程序时,我仍然在循环中看到相同的应用程序。

我需要使用什么机制阻止服务重启,如TaskKiller那样?

请不要用典型的“你不应该这样做”或“Android不是为了那样做”来回答这个问题。我的用户要求我自动杀死(不关闭)其他应用。 TaskKiller这样做的事实意味着它是可能的。

1 个答案:

答案 0 :(得分:0)

文档陈述了以下关于killBackgroundProcesses

的内容
  

让系统立即终止所有关联的后台进程   与给定的包。这与杀死那些的内核相同   回收记忆的过程;系统将负责重启   根据需要在未来进行这些过程。

注意,系统将负责重新启动服务。

因此,如果应用程序返回START_STICKY,则无法合法地执行API 8.在8之前,您可以使用restartPackage,看起来它可以正常工作。

我确信有一些无证的方式可以做到,但是如果你找到了这种方法,那么你的应用程序可以从市场上撤下,因为它会使T& Cs无效。

或者如果你把它作为一个根应用程序,那么可能会有一些允许它的东西,但我不能肯定地说,因为我从未研究过root的能力,就发展而言。

注意:虽然不应该这样做,但这不是我想说的。我只是想说,如果你想这样做,你将不得不打破T& Cs,或者考虑让它成为一个需要root权限的应用程序。

相关问题