Android初級開發筆記-- activity啓動模式的學習(1)

第一次學習Android中一個很重要的概念,啓動模式。文章記錄的也只是一些入門知識,隨着學習的深刻還會有activity啓動模式的學習(2)和(3)。 下面分三個小點說一下對啓動模式的理解區別以及如何設置。數據結構

預備知識

(1)activity是以任務棧的方式進行管理的,棧是一種先進後出的數據結構,棧中的activity只能經過出棧和壓棧的方式改變順序。 (2)啓動一個application的時候,系統會默認建立一個任務棧,默認啓動的activity都在同一個任務棧中。當啓動另外一個應用,以前那個任務棧就會被移到後臺,成爲後臺任務棧,而剛啓動的那個任務棧就被調到前臺,成爲前臺任務棧。在用戶面前顯示的始終是前臺任務棧中的棧頂activity。app

對四種啓動模式的理解

Android裏面說的啓動模式其實就是activity的啓動方式。 有下面四種學習

  • standard(默認)
  • singleTop(棧頂複用)
  • singleTask(棧內複用)
  • singleInstance(單例)

standard--系統默認的activity啓動模式,無論此時任務棧中的狀況如何,每次啓動一個activity,系統都會建立它的實例,並將其置於棧頂。開發

singleTop--另一種經常使用的啓動模式,當啓動一個activity時,系統會檢查一下當前任務棧中是否已經存在該activity實例,若是已經存在,就經過onNewIntent得到該實例把它置於棧頂。若是沒有。那麼建立該activity實例後將其置於棧頂。get

singleTask-- 當以這種模式啓動activity的時候,須要指定其任務棧。 activityA啓動activityB的時候,會先在系統尋找是否存在該棧。it

  • 不存在,建立棧並建立activity實例置於棧頂。
  • 存在,則在棧中尋找是否有B的實例,如有,則就經過onNewIntent得到該實例至於棧頂。無則建立該activity實例後將其置於棧頂。

singleInstance--看到名字就會想到單例模式是吧~是的,確實也是這樣的思想。爲了充分利用activity實例達到極致,設置這個啓動模式後,activityA啓動activityB,會專門爲activityB建立一個任務棧,而且建立activityB實例至於棧頂。該activity實例即可被系統內的應用共享。io

總結

對於時不時想把某個activity展現在用戶面前這件事,使用 默認:無論在不在棧頂,都建立(該棧中可能有多個實例)->棧頂複用:若在棧頂,則複用(該棧中可能有多個實例,但相對默認模式,少了點)->棧內複用:瞅瞅這個棧中有沒有,有就用,沒有就造一個(該棧中只有一個實例)->單例:直接自成一派,創個棧,只有這個activity一個實例而且在棧頂,無論哪一個應用程序都能用(該應用程序上下文中只有一個實例)。 弄明白了這幾種啓動模式後,就須要根據實際狀況決定使用哪一種啓動模式。入門

具體使用場景

因爲本人目前對啓動模式的使用比較少,後續有更多再補充。社區

  • 場景:使通知欄彈出Notification,點擊Notification跳轉到指定的Activity。 假設如今處於棧頂展現在用戶面前的就是這個activity。若是是默認模式,則會再次打開當前的Activity。這樣展現在用戶面前的效果就會很奇怪。(看起來是閃了一下) 若是使用的啓動模式是singleTop,就會避免這種現象的出現。ast

  • 場景:假設咱們的程序中有一個Activity是容許其餘程序調用的,咱們想讓其餘程序共享這個Activity的實例。若是使用的啓動模式是singleInstance,就能夠解決這個問題。

如何設置activity的啓動模式

通常有兩種方式設置。

  • 在manifast文件中經過activity的launchMode進行設置。
  • 經過對啓動該activity的intent設置標誌位實現。

疑惑及解答

1.如何設置不一樣的任務棧?

2.當activityA以標準模式啓動B的時候,B的實例被建立且處於activityA任務棧的頂端,那麼這個時候B啓動了A(standard)呢?

3.這兩種設置方式有什麼區別呢?經常使用的標誌位有好幾個,組合起來使用又有什麼不一樣的效果呢?

這些個答案等我下一篇文章再繼續介紹哈~敬請關注Android初級開發筆記-- activity啓動模式的學習(2)~

做者介紹

  • 楊曉華:廣州蘆葦科技 APP 團隊 Android 實習生

內推信息

  • 咱們正在招募小夥伴,有興趣的小夥伴能夠把簡歷發到 app@talkmoney.cn,備註:來自掘金社區
  • 詳情能夠戳這裏--> 廣州蘆葦信息科技
相關文章
相關標籤/搜索