需求是點擊某個按鈕,重啟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會立馬執(zhí)行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);