Android中常見的Bug


CPPAlien的專欄 .

[原]從Installer直接打開應用程序會出現Android系統bug

問題現象:

用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不同,並且以後每次點擊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則不進行重複創建。



發佈了16 篇原創文章 · 獲贊 8 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章