Activity的四種啟動模式對比

1.Standard(標準模式-默認)

2.SingleTop(棧頂復用模式)

3.SingleTask(棧內復用模式)

4.SingleInstance(全局唯一模式)

standard 啟動模式

這是 Activity 默認的啟動模式,這種模式下,每次 startActivity 都會在棧頂創建一個新的實例,在同一個任務中可以存在多個Activity 的實例。

singleTop 啟動模式

棧頂復用,也就是說,要啟動 singleTop 模式的 Activity,如果它恰好在當前棧頂,那么直接復用,執行其 onNewIntent 方法。否則,就重新創建一個實例入棧。

singleTask(棧內復用模式)

? ? 棧內復用模式。這是一種單實例模式,在這種模式下,只要 Activity 在一個棧中存在,那么多次啟動此 Activity 都不會重新創建實例,和 singleTop 模式一樣,系統也會回調其 onNewIntent。

? ? 注意,這里我們分 3 種情況來理解這個 launchMode:

?? ?1. 被啟動的 Activity 任務棧不存在:

? ??? ? 此時會新建一個該 Activity 的任務棧,并將 Activity 實例放到任務棧中。

?? ?2. 被啟動的 Activity 任務棧存在,但是任務棧中該 Activity 實例不處于棧頂而在棧內:

? ??? ? 此時會先將該 Activity 實例上面的其它 Activity 實例全部出棧(因為該啟動模式默認具有 clearTop 效果)并將要啟動的 Activity 實例置于棧頂,系統調用其 onNewIntent 方法。

?? ?3. 被啟動的 Activity 存在任務棧,而且該 Activity 實例在該任務棧棧頂位置:

? ? ?? ?直接復用任務棧中的該 Activity 實例,并調用其 onNewIntent 方法。

? ? 這里我們還需要注意一個 Activity 的屬性 TaskAffinity,可以翻譯為任務相關性。它標識了一個 Activity 所需要的任務棧的名字,默認情況下,所有 Activity 所需的任務棧的名字為應用的包名。這個屬性主要和 singleTask 啟動模式或者 allowTaskReparenting 屬性配對使用,在其它情況下沒有意義,為這個啟動的 Activity 的任務棧指定相應的名稱。

taskAffinity屬性:

那么什么是taskAffinity屬性呢,可以簡單的理解為任務相關性。

這個參數標識了一個Activity所需任務棧的名字,默認情況下,所有Activity所需的任務棧的名字為應用的包名

我們可以單獨指定每一個Activity的taskAffinity屬性覆蓋默認值

一個任務的affinity決定于這個任務的根activity(root activity也就是這個任務的棧低的activity)的taskAffinity

在概念上,具有相同的affinity的activity(即設置了相同taskAffinity屬性的activity)屬于同一個任務

為一個activity的taskAffinity設置一個空字符串,表明這個activity不屬于任何task

? ? ? ?很重要的一點taskAffinity屬性不對standard和singleTop模式有任何影響,即時你指定了該屬性為其他不同的值,這兩種啟動模式下不會創建新的task(如果不指定即默認值,即包名)

singleInstance(單實例模式)

? ? 單實例模式。這是一種加強的 singleTask 模式,它除了具有 singleTask 模式的所有特性外,還加強了一點,那就是具有此種模式的 Activity 只能單獨地位于一個任務棧中。

三個Flag

Intent 類里定義了很多 FLAG,這里我只說三種:

FLAG_ACTIVITY_NEW_TASK

僅僅通過intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);啟動的 Activity 即使 task 里已經有實例了,依然會在棧頂創建一個新的實例。

FLAG_ACTIVITY_SINGLE_TOP

僅僅通過intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);能夠實現 singleTop 啟動模式的效果,也就是僅在當前棧里判斷實例是否處于棧頂,在棧頂就復用,否則新建一個實例。

FLAG_ACTIVITY_CLEAR_TOP

清除目標 Activity上方所有的 Activity,如果目標 Activity 是 standard 的啟動模式且啟動時 intent 里沒有設置FLAG_ACTIVITY_SINGLE_TOP這個flag,那么棧里的目標 Activity 也會被 finish 掉,重新創建一個實例。

如果目標 Activity 是非 standard 的啟動模式或者啟動時設置了FLAG_ACTIVITY_SINGLE_TOP,就不會清除目標 Activity,執行其 onNewIntent() 方法。

Flag 組合設置:

僅僅通過intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);這兩行代碼來啟動的 Activity,如果棧里已有 Activity 的實例,那么清空此 Activity 及其以上的 activites,然后新建一個實例。

僅僅通過intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);能夠達到跟 singleTask 啟動模式的效果,如果棧里已有實例,則清空其上的 activies,然后走 onNewIntent()。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容