需求是点击某个按钮,重启app
比如,已经打开页面A,B,C,D,然后D页面有个按钮,点击一下,重启app,完全重启,也就是从application开始。
首先System.exit(0)这一句,只能关闭页面D,不能关闭A,B,C,
如果要把页面A,B,C一起关闭,需要加一句finishAffinity(),这个方法是Activity有的。
调用System.exit(0)以后,需要注意的事情。
如果你已经启动了某些Service,而onStartCommand方法又返回了START_STICKY,那么,app会立马执行application,完事重新start这些Service。
所以,如果我们的Service不是随着app启动而立马就启动的情况下,需要在exit之前把这些服务手动stop掉,免得app重启以后这些服务就自动启动了。
假设我们延迟启动app,如下,延迟10秒
Intent mStartActivity = new Intent(activity, XXXActivity.class);
int mPendingIntentId = 123;
PendingIntent mPendingIntent = PendingIntent.getActivity(activity, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 10000, mPendingIntent);
如果没有START_STICKY的Service,那么application也是在10秒后启动的,如果有START_STICKY的Service,那么application是立马启动,并且把Service也重启,之后才是等待10秒加载XXXActivity的。
另一种杀死进程的方法
android.os.Process.killProcess(android.os.Process.myPid());
等同于
finishAffinity();
System.exit(0);