直奔主题,现在介绍一下Android中结束进程的几种方法。

1.void restartPackage(String packageName)
该方法为@Deprecated,实际调用的是killBackgroundProcesses(packageName)方法:

下面主要介绍一下 killBackgroundProcesses 方法。

2.void killBackgroundProcesses(String packageName)
该方法返回值为空,所以我们不知道我们要杀掉的进程是否被杀死。但是他可 以根据包名结束另外一个进程。需要添加权限:

下面我们来看一下它依次调用的函数:

  • 调用ActivityManagerNative的killBackgroundProcesses方法

  • 其中mRemote的类型是Binder,调用的函数为
    java
    mRemote.transct(int,Parcel,Parcel,int )

3. kill -9 pid 命令
shell命令是Linux命令,Android底层是linux系统,所以Android上可以使用所有Linux 终端命令。
Ⅰ.这里的kill指的是shell command的那个kill,输入man kill可以看到kill的作用(如下图):向某个指定的进程进程或进程租发送信号,从而结束该进程/进程租。只有”super-user”即Android root用户才能使用。

Ⅱ.kill命令支持发送的信号列表如下:

Ⅲ. kill -9 pid命令,是向进程号为pid的进程发送SIGKILL信号,SIGKILL既不能被应用程序捕获,也不能被阻塞或忽略,其动作是立即结束指定进程。也就是说,应用程序无法感应到SIGKILL信号,就会被收到SIGKILL信号的操作系统给杀死了。

4.am force-stop packagenam命令

am命令是Android在shell控制台通过am命令来发送Intent,它的源码位置在frameworks/base/cmds/am。其本身就是用java代码实现的。

am脚本文件:

Ⅰ.Android执行am命令其实就是通过运行shell脚本,然后在该脚本中运行app_process命令启动am.jar下的Am.java程序

Ⅱ.am.jar位置:/system/framework/am.jar

Ⅲ.Am.java下froce-stop pkgName源码:

让我们来看一下Am到底是什么:
首先,Am继承自BaseCommand:

读入命令并分析命令:

op为读取到的命令字符串,若命令为”force-stop”调用runForceStop()函数。
runForceStop()函数:

其实调用的是forceStopPackage(),mAm类型为IActivityManager类型,也就是调用 ActivityManager的forceStopPackage()函数。
forceStopPackage()函数:

最终调用 ActivityManagerNative.forceStopPackage() 方法:

总结:三种结束进程方法对比
方法 介绍 root权限 Mainfest权限
killBackgroundProcesses 系统根据包名来杀掉进程,并且如果系统需要这些进程的话,会重新启动这些进程。 no yes
kill -9 pid shell命令,此命令为Linux命令,Android底层是Linux,所以Android上可以使用所有Linux终端命令。 yes no
am force-stop packageName am是Android系统中/system/bin/目录下的一条命令。不仅可以在终端下启动应用程序,还可以启动Service、发送广播以及Intent、force stop process等。 yes no
效果:

1.killBackgroundProcesses(pkgName):不能杀死如QQ、微信等这样的『顽固进程』

2.kill -9 pid:可以杀死类似于QQ、微信这样的进程,但是进程被杀死后又会重新启动。(一个正在运行的应用可能不止有一个进程,此时需要注意把该应用所有的进程全部杀死)

3.am force-stop packageName : 可以杀死类似QQ、微信这样的『顽固进程』,并且不会重启,效果同『设置』->『应用』->『应用程序名』->『强行停止』。会将整个程序所有进程全部杀死,无法收到一些推送消息、即时消息。

更多相关文章

  1. android 使用include 调用内部组件
  2. 自定义 Toast
  3. Android(安卓)调用J2EE webservice
  4. 调用与外部接口
  5. Android(安卓)service 服务 笔记
  6. Android(安卓)4.0 gallery2 生成video thumbnail的过程
  7. Android网文
  8. 记录一下maven android 的启动命令
  9. 理解 Android(安卓)的 ONE_SHOT_MAKEFILE

随机推荐

  1. 介绍一种更方便的代理池实现方案
  2. Pandas,数据处理的好帮手!
  3. 深入理解 MySql 的 Explain
  4. 动态可视化告诉你,从1965年开始哪些编程语
  5. 用Python给旧时光上色!
  6. 为什么他开个会都能睡着呢?
  7. 那些功能逆天,却鲜为人知的pandas骚操作
  8. 大赞!分享一个数据科学利器 PyCaret,几行代
  9. 最近工程师怎么都在写公众号?这玩意到底能
  10. 如何实现本地代码和远程的实时同步