activity lunchmode詳解

轉載請註明出處:http://blog.csdn.net/zhouli_csdn/article/details/45645743


看了網上的博客關於launchmode的介紹自己感覺很凌亂,總結性不強(可能自己沒找到好的文章),於是自己親自動手寫了兩個應用A和B測試:

本人一下內容都經過實際的測試:(通過兩個應用測試)


standard:每次都會新建,每個Task都可以有,且每個Task都可以有多個實例(每個Task都可以有,且可以有多個)


singleTop:當前實例如果在棧頂,就不新建實例,調用其OnNewIntent。 如不在棧頂,則新建實例 (每個Task都可以有,且可以有多個,在棧頂時可複用)

以上兩種模式比較簡單。


假設兩個應用A和B(A的主activity爲m1,singleTop爲m2,singleTask爲m3,singleInstance爲m4,;B的主activity爲n1)返回鍵會使應用退出task

singleTask:新建一個Task,如果已經有其他的Task並且包含該實例,那就直接調用那個Task的實例。(只有一個Task中會有)

1)該實例只會存在A應用Task中,如果A應用沒有創建,那麼會創建一個新的task,此時按home鍵退出,並且A自己啓動的時候發現A的主頁面並沒有啓動而是直接打開該task的m3頁面。

2)A應用已經啓動且m3存在實例,並且m3上面還有其它的activity,那麼如果從本應用或者其它應用再次打開m3時,m3上面的activity都會銷燬。


onNewIntent()非常好用,Activity第一啓動的時候執行onCreate()---->onStart()---->onResume()等後續生命週期函數,也就時說第一次啓動Activity並不會執行到onNewIntent(). 而後面如果再有想啓動Activity的時候,那就是執行onNewIntent()---->onResart()------>onStart()----->onResume().  如果android系統由於內存不足把已存在Activity釋放掉了,那麼再次調用的時候會重新啓動Activity即執行onCreate()---->onStart()---->onResume()等。


singleInstance:新建一個Task,且在該Task中只有它的唯一一個實例。 (只有一個Task會有,且該Task中只有它)

1)m4不會存在與其主應用A中,也不會存在於打開它的應用B中,m4單獨存在於一個task中。

2)B應用打開後,打開m4,如果m4不存在,那麼會新建一個task,此時如果按home鍵,啓動A應用會啓動A自身的task。

3)如果想啓動m4,可以在task列表中發現,會有三個task存在,且m4單獨存在一個task中。


總結:

1)每一個應用都有一個以其主Activity爲root的task堆棧。

2)SingleInstance會單獨的擁有一個task,不依賴於任何應用的task。(如果A、B應用均已啓動,m4也啓動,那麼系統現在會有三個task,可以查看task列表)

3)SingleTask依賴於自己應用的Task,只會存在於自身的應用當中。(且如果A應用之前沒有啓動過,那麼如果此task沒有退出,啓動A應用時,m3會作爲應用task的root存在,這意味着A的主activity得不到執行)

4)singleTask會結束自己上面的activity。

5)B啓動singleTask,會將A應用task移到B的上面來,變爲可見task。

6)啓動standared和singleTop模式的activity,都只會在自身的task中創建該實例。

7)這次測試發現,系統每次新建一個task都會在之前的基礎上加一。(taskid會越來越大)


應用場景暫時略掉


下面用圖解釋上面的總結:


啓動模式應用場景這篇文章寫得不錯,內容正確性可以保證:文章

singleTop適合接收通知啓動的內容顯示頁面。
例如,某個新聞客戶端的新聞內容頁面,如果收到10個新聞推送,每次都打開一個新聞內容頁面是很煩人的。
singleTask適合作爲程序入口點。
例如瀏覽器的主界面。不管從多少個應用啓動瀏覽器,只會啓動主界面一次,其餘情況都會走onNewIntent,並且會清空主界面上面的其他頁面。
singleInstance適合需要與程序分離開的頁面。
例如鬧鈴提醒,將鬧鈴提醒與鬧鈴設置分離。
singleInstance不要用於中間頁面,如果用於中間頁面,跳轉會有問題,比如:A -> B (singleInstance) -> C,完全退出後,在此啓動,首先打開的是B。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章