Android结束进程的方法

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

1.void restartPackage(String packageName)
该方法为@Deprecated,实际调用的是killBackgroundProcesses(packageName)方法:
这里写图片描述
下面主要介绍一下 killBackgroundProcesses 方法。

2.void killBackgroundProcesses(String packageName)
该方法返回值为空,所以我们不知道我们要杀掉的进程是否被杀死。但是他可 以根据包名结束另外一个进程。需要添加权限:<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
这里写图片描述
下面我们来看一下它依次调用的函数:

  • 调用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脚本文件:

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系统根据包名来杀掉进程,并且如果系统需要这些进程的话,会重新启动这些进程。noyes
kill -9 pidshell命令,此命令为Linux命令,Android底层是Linux,所以Android上可以使用所有Linux终端命令。yesno
am force-stop packageNameam是Android系统中/system/bin/目录下的一条命令。不仅可以在终端下启动应用程序,还可以启动Service、发送广播以及Intent、force stop process等。yesno
效果:

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

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值