(二十七)杀死进程的方法

杀死进程的方法
1: final ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName()); // 2.2 之后就不可以用了
<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>

2: ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
manager.killBackgroundProcesses(getPackageName()); //杀死进程后,进程会重启

//需要在xml中加入权限声明
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
3: final ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);
forceStopPackage.setAccessible(true);
forceStopPackage.invoke(am, yourpkgname);
// 需要在manifest里加上shareduid定义
android:sharedUserId="android.uid.system"
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>
4: 终极方法,杀死后台service而不自启动: am (Activity Manager)命令
相信很多人对 am 命令都挺熟悉的,它是Android系统中/system/bin/目录下的一条命令。
不仅可以在终端下启动一个应用程序,还可以启动Service,发送 broadcast以及Intent action ,
force stop process 等等,功能非常强大。这里我们要用到一个功能就是强制停止应用程序!
对于命令 am 的介绍与用法,官网给的非常详细,请参照Android 官网:
http://developer.android.com/tools/help/adb.html#am
我们用到的方法和功能是:am force-stop <PACKAGE>
下面是我们的代码举例
private void forceStopAPK(String pkgName){
Process sh = null;
DataOutputStream os = null;
try {
sh = Runtime.getRuntime().exec("su");
os = new DataOutputStream(sh.getOutputStream());
final String Command = "am force-stop "+pkgName+ "\n";
os.writeBytes(Command);
os.flush();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
sh.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

posted @ 2014-12-10 15:35  小菜美妞成长中  阅读(187)  评论(0)    收藏  举报