manager.restartPackage(getPackageName()); 需要声明权限<uses-permission android:name="android.permission.RESTART_PACKAGES"/> 这种方法会终止一切和这个程序包关联的,所有共享同一uid的process被kill,所有的activity会被removed 所有创建的服务会停止,还会发一个广播
Intent.ACTION_PACKAGE_RESTARTED
导致所有注册alarms 被stopped, notifications 被removed。
这几天刷了2.2的rom发现restartPackage方法无效,网上搜了下答案:
在Android 2.2中新增了一个API可以帮助我们杀死后台进程,不过Android123再次强调其调用的API Level最小为8,killBackgroundProcesses是android.app.ActivityManager类的方法,使用时必须在androidmanifest.xml文件中加入KILL_BACKGROUND_PROCESSES这个权限。虽然本类还提供了restartPackage (String packageName) 方法调用的API Level为3,但是SDK中已经标记为deprecated,其实他们的原理都是一样的,只不过过去Google的命名方式确实不是很合理,restartPackage的作用很难让我们联想到是结束进程。该方法的原型 public void killBackgroundProcesses (String packageName) 仅有一个参数为package Name,使用方法比较简单。
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses("cn.com.android123.cwj"); // API Level至少为8才能使用
所以要用此方法最好加个判断如果是2.2之前的rom就用restartPackage之后的就用killBackgroundProcesses
原始连接:http://blog.csdn.net/xyz_lmn/article/details/6028409#comments