Activity啟動模式分析詳解

Activity 的4種啟動模式(launchMode),像這種姿勢玖姑,基本上是面試必問的愕秫,在這里把它給徹底搞懂,搞透客峭!搞懷孕豫领,呃,不對舔琅。

官方說法

先給出 Google 的文檔等恐,有興趣的可以先去看看。任務和返回棧 這個是翻譯版备蚓,雖然是官方翻譯的课蔬,但是有些地方看起來還是怪怪的,看不慣的同學可以科學上網(wǎng)去看原版郊尝。

這里有一句話很關(guān)鍵:任務是指在執(zhí)行特定作業(yè)時與用戶交互的一系列 Activity二跋。 這些 Activity 按照各自的打開順序排列在堆棧(即返回棧)中。 這句話講得很模糊流昏,不知道任務和返回棧是一個概念扎即。在我看來,就把 task 理解成一個堆棧况凉,是用來存放 Activity 的就可以了谚鄙。如果 task 中的 Activity 都銷毀了,task 也不存在了刁绒。但是只要 task 中還有一個 Activity 存在闷营,task 就還存在。所以也不能說 task 是要多個 Activity 才能存在知市。

task 是怎么工作的

上面也說了傻盟,task 是以堆棧的方式來管理 Activity 的。當應用啟動的時候嫂丙,會創(chuàng)建一個 task娘赴,然后把主 Activity 放進 task 中。繼續(xù)啟動 BCD跟啤,現(xiàn)在 task 中有4個 Activity: Main筝闹、B媳叨、C腥光、D关顷,他們以各自打開的順序放在 task 中。

現(xiàn)在按返回鍵武福,D 出棧议双,taks 中還有:Main、B捉片、C平痰。再按3次返回棧,所有Activity 都銷毀出棧伍纫,然后 task 也不存在了宗雇,下次啟動的時候會再創(chuàng)建一個新的 task。是不是感覺很熟悉呢莹规,沒錯赔蒲,我們平時就是這么使用 APP 的,炒雞簡單是不是良漱。

來一張偷來的圖片舞虱,是不是看起來更形象了呢

task

好了,現(xiàn)在知道 task 是什么東西了母市,接下來就輪到4個啟動模式了矾兜,這4個啟動模式都跟 task 有緊密關(guān)系。

4個啟動模式

其實患久,應該先想想椅寺,為什么會有4個啟動模式。那肯定是因為默認的啟動模式不能滿足我們的需求蒋失,比如你想啟動一個 Activity 的時候返帕,想把它放到一個新的 task 中。又或者當 task 中已經(jīng)有這個 Activity 了高镐,你想直接使用這個 Activity 就行了溉旋,而不是在啟動一個新的。這些都可以通過配置 Activity 的啟動模式實現(xiàn)嫉髓。

配置 Activity 的啟動模式有2種方式观腊,一種是在 manifest 的 <activity> 標簽中配置,另外一種是使用 intent 標志算行。并且 使用intent 標志定義優(yōu)先級會比在 manifest 中定義的要高梧油。就是說會覆蓋的意思。

1. standard(默認模式)

默認模式州邢,Activity 在 task 中可以有多個實例儡陨。例如:現(xiàn)在有一個 task 和一個啟動模式是 standard 的 Activity A,那么在task中可以有多個 A 的實例。這個很簡單是不是

standard

2. singleTop

如果當前 task 的頂部已存在 Activity 的一個實例骗村,則系統(tǒng)會通過調(diào)用該實例的 onNewIntent() 方法向其傳送 Intent嫌褪,而不是創(chuàng)建 Activity 的新實例。 記住胚股,這個是要在頂部的時候笼痛,才不會創(chuàng)建新實例,如果不是在頂部琅拌,那么它還是會創(chuàng)建新的 Activity缨伊。

例如:當前 task 中有 A B C 三個 Activity,如果 C 的啟動模式是 singleTop 那么當調(diào)用 startActivity 啟動 C 的時候进宝,不會創(chuàng)建新的 Activity刻坊,而是通過 onNewIntent()方法 把這個 intent 傳遞進去。 taks 中還是 A B C 三個 Activity党晋。 這個也很簡單是不是谭胚。

singleTop

上圖所示: B 不是在頂部,所以還是會創(chuàng)建新的實例

3. singleTask

這個就厲害了隶校,一個Activity 聲明為 singleTask漏益,那么它在一個 task 中,就只能有一個實例深胳。其實從名字就可以看出來了绰疤,single in task 。并且它還會把在它之上的 Activity 全都踢出棧舞终,讓它自己升上頂部轻庆,霸道總裁既視感啊。例如:task 中有三個 Activity ABC敛劝,A的啟動模式是 singleTask余爆。

singleTask

然后我們調(diào)用 startActivity(A) 啟動 A,這時系統(tǒng)會調(diào)用 A 的 onNewIntent() 方法向其傳送 Intent夸盟。把 B C 出棧蛾方,A上到棧頂。

singleTask

4. singleInstance

這個比 singleTask 還要屌一點上陕,它也是在一個 task 中只能有一個實例桩砰,并且 singleInstance 會獨自占用一個 task,不與其他任何 Activity 共享释簿。孤獨終老的趕腳把怯纭!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庶溶,一起剝皮案震驚了整個濱河市煮纵,隨后出現(xiàn)的幾起案子懂鸵,更是在濱河造成了極大的恐慌,老刑警劉巖行疏,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匆光,死亡現(xiàn)場離奇詭異,居然都是意外死亡隘擎,警方通過查閱死者的電腦和手機殴穴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來货葬,“玉大人,你說我怎么就攤上這事劲够≌鹜埃” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵征绎,是天一觀的道長蹲姐。 經(jīng)常有香客問我,道長人柿,這世上最難降的妖魔是什么柴墩? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮凫岖,結(jié)果婚禮上江咳,老公的妹妹穿的比我還像新娘。我一直安慰自己哥放,他們只是感情好歼指,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甥雕,像睡著了一般踩身。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上社露,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天挟阻,我揣著相機與錄音,去河邊找鬼峭弟。 笑死附鸽,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的孟害。 我是一名探鬼主播拒炎,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挨务!你這毒婦竟也來了击你?” 一聲冷哼從身側(cè)響起玉组,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丁侄,沒想到半個月后惯雳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡鸿摇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年石景,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拙吉。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡潮孽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筷黔,到底是詐尸還是另有隱情往史,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布佛舱,位于F島的核電站椎例,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏请祖。R本人自食惡果不足惜订歪,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肆捕。 院中可真熱鬧刷晋,春花似錦、人聲如沸福压。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荆姆。三九已至蒙幻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胆筒,已是汗流浹背邮破。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仆救,地道東北人抒和。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像彤蔽,于是被迫代替她去往敵國和親摧莽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容