第一次學習Android中一個很重要的概念,啓動模式。文章記錄的也只是一些入門知識,隨着學習的深刻還會有activity啓動模式的學習(2)和(3)。 下面分三個小點說一下對啓動模式的理解區別以及如何設置。數據結構
(1)activity是以任務棧的方式進行管理的,棧是一種先進後出的數據結構,棧中的activity只能經過出棧和壓棧的方式改變順序。 (2)啓動一個application的時候,系統會默認建立一個任務棧,默認啓動的activity都在同一個任務棧中。當啓動另外一個應用,以前那個任務棧就會被移到後臺,成爲後臺任務棧,而剛啓動的那個任務棧就被調到前臺,成爲前臺任務棧。在用戶面前顯示的始終是前臺任務棧中的棧頂activity。app
Android裏面說的啓動模式其實就是activity的啓動方式。 有下面四種學習
standard--系統默認的activity啓動模式,無論此時任務棧中的狀況如何,每次啓動一個activity,系統都會建立它的實例,並將其置於棧頂。開發
singleTop--另一種經常使用的啓動模式,當啓動一個activity時,系統會檢查一下當前任務棧中是否已經存在該activity實例,若是已經存在,就經過onNewIntent得到該實例把它置於棧頂。若是沒有。那麼建立該activity實例後將其置於棧頂。get
singleTask-- 當以這種模式啓動activity的時候,須要指定其任務棧。 activityA啓動activityB的時候,會先在系統尋找是否存在該棧。it
singleInstance--看到名字就會想到單例模式是吧~是的,確實也是這樣的思想。爲了充分利用activity實例達到極致,設置這個啓動模式後,activityA啓動activityB,會專門爲activityB建立一個任務棧,而且建立activityB實例至於棧頂。該activity實例即可被系統內的應用共享。io
對於時不時想把某個activity展現在用戶面前這件事,使用 默認:無論在不在棧頂,都建立(該棧中可能有多個實例)->棧頂複用:若在棧頂,則複用(該棧中可能有多個實例,但相對默認模式,少了點)->棧內複用:瞅瞅這個棧中有沒有,有就用,沒有就造一個(該棧中只有一個實例)->單例:直接自成一派,創個棧,只有這個activity一個實例而且在棧頂,無論哪一個應用程序都能用(該應用程序上下文中只有一個實例)。 弄明白了這幾種啓動模式後,就須要根據實際狀況決定使用哪一種啓動模式。入門
因爲本人目前對啓動模式的使用比較少,後續有更多再補充。社區
場景:使通知欄彈出Notification,點擊Notification跳轉到指定的Activity。 假設如今處於棧頂展現在用戶面前的就是這個activity。若是是默認模式,則會再次打開當前的Activity。這樣展現在用戶面前的效果就會很奇怪。(看起來是閃了一下) 若是使用的啓動模式是singleTop,就會避免這種現象的出現。ast
場景:假設咱們的程序中有一個Activity是容許其餘程序調用的,咱們想讓其餘程序共享這個Activity的實例。若是使用的啓動模式是singleInstance,就能夠解決這個問題。
通常有兩種方式設置。
1.如何設置不一樣的任務棧?
2.當activityA以標準模式啓動B的時候,B的實例被建立且處於activityA任務棧的頂端,那麼這個時候B啓動了A(standard)呢?
3.這兩種設置方式有什麼區別呢?經常使用的標誌位有好幾個,組合起來使用又有什麼不一樣的效果呢?
這些個答案等我下一篇文章再繼續介紹哈~敬請關注Android初級開發筆記-- activity啓動模式的學習(2)~
- 楊曉華:廣州蘆葦科技 APP 團隊 Android 實習生
- 咱們正在招募小夥伴,有興趣的小夥伴能夠把簡歷發到 app@talkmoney.cn,備註:來自掘金社區
- 詳情能夠戳這裏--> 廣州蘆葦信息科技