Android 结束进程的几种方法
第一种方法:
主要适合api Level<=7
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE); am.restartPackage("com.android.music");
并且需要在Manifest里面注册权限
1 <!-- API Level7及以下使用的 -->
2 <uses-permission android:name="android.permission.RESTART_PACKAGES"/>
第二种方法:
主要适合API Level>=8使用
1 ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
2 am.killBackgroundProcesses("com.android.mms");
在Manifest注册权限
1 <!-- api Level 8以上使用的 -->
2 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
第三种方法:
利用Java的反射机制:
1 ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
2 try {
3 Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);
4 forceStopPackage.setAccessible(true);
5 forceStopPackage.invoke(am, "com.android.mms");//com.android.mms是要结束进程的包名
6 } catch (SecurityException e) {
7
8 e.printStackTrace();
9 } catch (IllegalArgumentException e) {
10 // TODO Auto-generated catch block
11 e.printStackTrace();
12 } catch (NoSuchMethodException e) {
13 // TODO Auto-generated catch block
14 e.printStackTrace();
15 } catch (IllegalAccessException e) {
16 // TODO Auto-generated catch block
17 e.printStackTrace();
18 } catch (InvocationTargetException e) {
19 // TODO Auto-generated catch block
20 e.printStackTrace();
21 }
但是上面的代码运行的时候会出现 java.lang.reflect.invocationtargetexception 这个异常至今我还没有找到 不过 这个方法的确是可行的。
找到这个异常的原因也可和我交流 我们共同进步!