ActivityManager.killBackgroundProcesses 不同于“强制停止”
Posted
技术标签:
【中文标题】ActivityManager.killBackgroundProcesses 不同于“强制停止”【英文标题】:ActivityManager.killBackgroundProcesses different from "Force stop" 【发布时间】:2012-02-06 07:28:18 【问题描述】:我在我的应用程序中尝试使用 ActivityManager.killBackgroundProcesses 并注意到一些有趣的事情。我希望***上的人能对此有所了解。
所以如果我启动一个应用程序,例如youtube,我首先会看到视频页面列表,然后单击菜单->设置,我会得到设置页面。现在,如果我单击主页按钮,这会将 youtube 置于后台。到目前为止,一切都很好。现在,如果我运行 ActivityManager.killBackgroundProcesses 来杀死 youtube 应用程序(或者我使用我相信使用相同 API 的高级任务杀手),当我再次启动 youtube 时,我会看到设置页面,而不是视频页面的默认列表。
但是,如果我不执行 ActivityManager.killBackgroundProcesses,而是转到系统设置->管理应用程序->Youtube->强制停止,当我再次启动 youtube 时,我得到的是视频页面列表,而不是设置页面。
因此,ActivityManager.killBackgroundProcesses 似乎与强制停止不同,因为它仍然记得在它被置于后台之前它所在的最后一个任务/页面,而强制停止给你一个新的开始。
有人对此有很好的解释吗?是否可以在我的代码中执行“强制停止”以重新启动应用程序?
非常感谢!
【问题讨论】:
澄清一下,我试图杀死/重启的应用是第三方应用,例如 gmail、youtube 等,我无法更改它们的代码。 从 Google 上的一篇旧帖子中找到。 groups.google.com/group/android-developers/browse_thread/thread/… 看来“强制停止”是用restartPackage 实现的,但是在2.2 中,restartpackage 基本被去掉了,变成和killbackgroundprocess 基本一样了。我猜测 2.2 及更高版本必须使用新的 API 来终止该进程,但没有记录在案... 【参考方案1】:记录到 Android 操作系统安全系统,您的应用不能仅仅杀死另一个活动。你可以向系统发送请求,如果可能的话,它会为你做所有需要的事情。
设置是系统应用,这就是为什么它比你的应用拥有更多的访问权限。
所以,看起来操作系统不允许您杀死应用程序。不确定,但请尝试检查您的应用权限 - 也许有解决方案。
【讨论】:
是和不是。 killBackgroundProcesses 确实允许您关闭进程,但它似乎不是强制关闭的“硬”关闭。它仍然保留上次运行的某些状态,例如记住上次停止的位置。 .killBackgroundProcesses 之后应用程序是否停留在“设置->管理应用程序”中?【参考方案2】:嗯,我不确定如何使用它,因为我以前从未尝试过使用除我以外的应用程序,但也许它会有所帮助 - 考虑使用:android.os.Process.killProcess(android.os.Process.myPid());
关于您的问题,为什么系统可以停止而您不能。事实是,系统可以更多。更具体一点,当您按下强制停止按钮时,系统会发送终止信号(信号 9)以使用给定的 pid 进行处理。
这就是我认为上述函数应该有所帮助的原因,因为它发送的信号几乎(即使不完全相同)。
希望它会有所帮助。
【讨论】:
感谢您的建议。但这对我的情况没有帮助。 killProcess 不会杀死我不拥有的应用程序,例如 gmail、youtube 等。我试过了,它对这些应用程序没有影响。以上是关于ActivityManager.killBackgroundProcesses 不同于“强制停止”的主要内容,如果未能解决你的问题,请参考以下文章