1. 程式人生 > >Android app執行時按HOME鍵,再次點選圖表後從新呼叫啟動頁問題

Android app執行時按HOME鍵,再次點選圖表後從新呼叫啟動頁問題

如標題所述,最近被重複例項化launcher activity這個問題搞得很慘,這個問題有哪些表現呢?如下:

1. 在package installers 安裝介面安裝完一個應用後,直接開啟app,然後進入了 Activity_1, 此時再通過此activity用startActivity(intent)的方法開啟Activity_2.

2. 然後按home鍵返回桌面,在桌面點選app圖示進入,你覺得應該進入的是 Activity_2 ,實際上卻是launcher Activity_1 .

3. 然而還沒完,這時候你按 back 返回鍵,會發現返回到了之前開啟的 Activity_2,再按返回,又出現 launcherActivity_1.

也就是說系統重複例項化了Activity_1.

4. 退出app後再次點選桌面圖示進入,反覆試驗,沒有再出現這個問題。也就是說,這個問題(bug ?)只出現在操作步驟(1)後才會產生.


---------------------------------------------

我在百度後發現大家都拿launchMode說事,不知道他們試驗過沒,完全不能解決。況且從那四個屬性的描述來看,也與此無關。

照理說,launcher Activity_1 啟動Activity_2後自身就進入棧底,而Activity_2就在棧頂了,實際上從 操作(3)來看也確實如此。

對操作(2)出現的情況,有文章說這個時候Activity_2此時也退棧了,而Activity_1彈出來了。這是個什麼情況?雖然在返回桌面時Activity_2處於onStop()階段,但並沒有立刻被系統銷燬,從操作(3)就可看出。在該APP的記憶體空間的中,此時的Activity_2是最後與使用者互動的activity在沒有被系統銷燬前肯定是在Activity_1之上的。

在onResume()後肯定也應該顯示的棧頂的Activity_2.

上面的問題,我覺得是Android系統的bug,4.4.4也存在這個問題。

解決方案。

在“啟動頁面”的super.onCreate(...)方法之後插入程式碼:

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
            finish();
            return;
        }