此Bug,經測試截止到Android在5.0版本上都還沒有解決。并且一些大廠的APP,比如新浪微博都會有此問題。
問題現象:
用Android系統自帶的Installer安裝完應用后,會有以下兩個不同表現:
1,用戶直接在installer界面打開應用。然后按home鍵后臺運行,此時如果再點擊該應用的launcher圖標或者快捷方式進入,會發現該應用又會從該應用第一個頁面重新開始啟動。
2,用戶在installer界面安裝完后,直接點擊完成,然后找到launcher圖標點擊啟動應用。此時按home鍵后臺,再次點擊圖標進入,發現應用會呈現上次按home鍵前呈現的Activity。
測試實驗:
經測試發現,只要是從一個應用去啟動另一個應用,都會有此問題,以下我會用一個例子說明。
現有App1和App2.
App1中有一個Activity,有如下代碼去打開App2.
PackageManager packageManager = getPackageManager();Intent intent;
intent = packageManager.getLaunchIntentForPackage("cc.ninty.app2");
if(intent==null) {
System.out.println("APP not found!");
}
startActivity(intent);
App2中有兩個Activity,Activity1和Activity2,用Activity1去自動startActivity2.
以上三個Activity的launch mode都為默認的standard。此時執行App1,并監控這三個Activity的taskid。
可以發現通過App1啟動的App2中的兩個Activity的taskid與App1不同,并且以后每次Home鍵后臺后再點擊APP2的launcher圖標都會發現Activity1和Activity2又會被重新創建一次,并且taskid與前一次相同。
問題原因:
Android從最初開始一直有次bug并且一直未修復,以下是找的一些資料。
https://code.google.com/p/android/issues/detail?id=2373
https://code.google.com/p/android/issues/detail?id=26658
http://stackoverflow.com/questions/16283079/re-launch-of-activity-on-home-button-but-only-the-first-time/16447508#16447508
規避方案:
因第二次通過launcher或者快捷方式啟動應用,會重新創建Activity1,但此時的Activity1不是該task的root(也即該task第一個擁有的activity),所以可以通過在Activity1的onCreate方法中寫以下判斷:
if ( !isTaskRoot() ) {
finish();
return;
}
表示如果task中還有其他Activity則不進行重復創建。