昨天同事無意間碰到了這樣一種情況级遭,在瀏覽器中安裝app后打開然后按下home鍵芬位,這時(shí)再在桌面點(diǎn)擊app圖標(biāo)打開龙巨,發(fā)現(xiàn)應(yīng)用重啟了笼呆,然后多次點(diǎn)擊圖標(biāo)每次都重啟,問我為什么會(huì)出現(xiàn)這樣的問題旨别,私下仔細(xì)揣摩了下找到了解決辦法诗赌,以此記錄下:
首先找到manifest中帶有:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
這段代碼聲明的activity,這是app啟動(dòng)的第一個(gè)activity秸弛,然后在這個(gè)activity的oncreate方法中添加如下判斷:
if (!this.isTaskRoot()) {
Intent intent = getIntent();
if (intent != null) {
String action = intent.getAction();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
finish();
}
}
}
首先判斷該activity是否是根activity(第一個(gè)啟動(dòng)的activity)铭若,然后回去intent,判斷intent中是否帶有CATEGORY_LAUNCHER和ACTION_MAIN递览,如果有就認(rèn)為是從桌面啟動(dòng)的app叼屠,如果后臺(tái)有已經(jīng)存在的任務(wù)棧,就會(huì)把這個(gè)任務(wù)棧從后臺(tái)移到前臺(tái)展示绞铃,如果后臺(tái)沒有該app的任何任務(wù)棧就會(huì)跳過這段代碼重新啟動(dòng)app镜雨。