我使用ActivityManager.killBackgroundProcesses()通过包名来终止进程。在我杀死不使用服务的应用程序(如计算器)之前,我可以看到TaskKiller中列出的应用程序,在使用killBackgroundProcesses之后,我看不到图标。对于一个使用服务的应用程序,我遇到了麻烦。即使我杀了它,我仍然可以在TaskKiller上看到它。我假设这是因为使用了START_STICKY的服务,但是如何阻止它重新启动呢?您可以使用TaskKiller来杀死服务(这需要额外的步骤,但它可以工作,因此是可能的!)例如,如果我试图杀死潘多拉,音乐就会停止播放,但当我打开TaskKiller时,我仍然可以看到这些服务在运行。
我使用循环搜索所有正在运行的进程,如下所示:
用于( info:activityManager.getRunningAppProcesses()){ RunningAppProcessInfo)
当我找到正在寻找的进程时,我使用killBackgroundProcesses。如果我杀死一个没有服务的应用程序,我可以在循环中运行,看到它不再出现在循环中。当我用服务杀死一个应用程序时,我仍然会在循环中看到相同的应用程序。
我需要使用什么机制来阻止服务像TaskKiller那样重新启动?
请不要用典型的“你不应该这么做”或者"Android不应该这样做“来回答这个问题。我的用户要求我自动杀死(而不是关闭)其他应用程序。TaskKiller正在这样做的事实意味着这是可能的。
发布于 2011-09-08 00:42:07
docs声明了关于killBackgroundProcesses的以下内容
让系统立即杀死与给定包相关联的所有后台进程。这与内核杀死这些进程以回收内存是一样的;系统将根据需要在将来重新启动这些进程。
注意,系统将负责重新启动服务。
因此,如果一个应用程序返回START_STICKY,就没有办法合法地从API 8开始执行它。在8之前,您可以使用restartPackage,看起来它可以工作。
我相信有一些没有文件证明的方法可以做到,但是如果你找到了这个方法,那么你的应用程序就会被从市场上撤出,因为它会使T&Cs失效。
或者,如果您将它作为根应用程序,那么可能会有允许它的东西,但我不能肯定地说,因为我从未研究过什么是根的能力,就开发而言。
注意:虽然这是不应该做的,但这不是我想说的。我只是想说,如果你想这样做,你将不得不打破T&C,或考虑让它成为一个应用程序,需要根骄傲。
https://stackoverflow.com/questions/7340740
复制相似问题