谢谢!
Process.killProcess(int pid)
ActivityManager.killBackgroundProcesses(String packageName)
首先,通过调用Process.killProcess(int pid)方法来结束指定进程。pid是特定进程的唯一标识符。Android像Linux一样杀死进程;但是,用户只能杀死自己拥有的进程。在Android中,每个应用程序都使用唯一的UID(UserID)运行。使用此API时,应用程序只能结束自己的进程,因此在Process.killProcess(int pid)文档中有以下解释:
结束给定PID的进程。请注意,尽管此API允许我们请求根据其PID终止任何进程,但内核仍将对您实际能够终止哪些PID施加标准限制。通常,这意味着只有运行调用者软件包/应用程序和该应用程序创建的任何其他进程的进程;共享公共UID的软件包也将能够终止彼此的进程。 调用此方法时,信号由操作系统生成并发送到进程。每当进程从操作系统接收到信号时,它必须处理该信号或立即终止。无法处理SIG_KILL等信号,并导致接收方进程立即终止。如果您想要终止您没有权限终止的进程,即不是您的进程,则必须切换用户或提升您的权限(在Android上,这需要在设备上获取root权限)。
第二个API通过告诉内置的ActivityManager您要终止与特定包相关联的进程来工作。此API避免了UID需要与进程的UID匹配的问题,因为它需要用户接受KILL_BACKGROUND_PROCESSES权限。此权限向操作系统发出信号,表明用户已批准应用程序作为任务管理器。当任务管理器想要终止应用程序时,它会告诉操作系统终止该进程,从而使应用程序可以解决仅能终止自己拥有的进程的问题。
在Android文档中,它说这个API实际上使用了第一个Process.killProcess API。
立即结束与给定软件包关联的所有后台进程。这与内核杀死这些进程以回收内存相同;系统将负责在将来根据需要重新启动这些进程。 如果您想了解更多信息,建议您阅读有关Posix Signals和Linux kill命令的内容。