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 这个异常至今我还没有找到 不过 这个方法的确是可行的。

      找到这个异常的原因也可和我交流 我们共同进步!

 

posted @ 2011-08-09 15:53  水向东流  阅读(6893)  评论(1编辑  收藏  举报