需求是點(diǎn)擊某個(gè)按鈕,重啟app
比如馆匿,已經(jīng)打開(kāi)頁(yè)面A,B,C,D,然后D頁(yè)面有個(gè)按鈕,點(diǎn)擊一下呕臂,重啟app,完全重啟谜洽,也就是從application開(kāi)始。
首先System.exit(0)這一句实束,只能關(guān)閉頁(yè)面D咸灿,不能關(guān)閉A,B,C签赃,
如果要把頁(yè)面A,B,C一起關(guān)閉歹嘹,需要加一句finishAffinity(),這個(gè)方法是Activity有的卑吭。
調(diào)用System.exit(0)以后富稻,需要注意的事情抚岗。
如果你已經(jīng)啟動(dòng)了某些Service,而onStartCommand方法又返回了START_STICKY笋额,那么茉盏,app會(huì)立馬執(zhí)行application,完事重新start這些Service讶迁。
所以,如果我們的Service不是隨著app啟動(dòng)而立馬就啟動(dòng)的情況下祟峦,需要在exit之前把這些服務(wù)手動(dòng)stop掉宅楞,免得app重啟以后這些服務(wù)就自動(dòng)啟動(dòng)了距淫。
假設(shè)我們延遲啟動(dòng)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);
如果沒(méi)有START_STICKY的Service龄砰,那么application也是在10秒后啟動(dòng)的式镐,如果有START_STICKY的Service夕玩,那么application是立馬啟動(dòng),并且把Service也重啟旷偿,之后才是等待10秒加載XXXActivity的。
另一種殺死進(jìn)程的方法
android.os.Process.killProcess(android.os.Process.myPid());
等同于
finishAffinity();
System.exit(0);