singleTask啟動(dòng)模式引發(fā)的問(wèn)題和感悟

1.問(wèn)題描述

今天碰到了一個(gè)問(wèn)題,當(dāng)一個(gè)Activity的啟動(dòng)模式為SingleTask的時(shí)候胳赌,Activity間進(jìn)行跳轉(zhuǎn)的時(shí)候,在該Activity的onCreate()方法里接收不到Bundle攜帶過(guò)來(lái)的值易核,通過(guò)這個(gè)小問(wèn)題也讓我明白了學(xué)習(xí)啟動(dòng)模式的重要性匈织。

在解決這個(gè)問(wèn)題之前,我們先來(lái)看一種情況牡直,假設(shè)現(xiàn)在有ABCDE五個(gè)ActivIty,只有B的啟動(dòng)模式是singleTask,其余Activty是標(biāo)準(zhǔn)模式缀匕,Activity跳轉(zhuǎn)的順序是ABCDEAB,問(wèn)現(xiàn)在棧中還有那幾個(gè)Activity,知道singleTask原理的小伙伴們很容易知答案是A和B。

2.找原因

我們先來(lái)對(duì)比一下,standard標(biāo)準(zhǔn)模式和 singleTask 棧內(nèi)復(fù)用模式:

1.如果ABCDE這五個(gè)Activity都是標(biāo)準(zhǔn)啟動(dòng)模式碰逸,那依次執(zhí)行完跳轉(zhuǎn)Activity:ABCDEAB,棧內(nèi)的情況是這樣的:


情形1

標(biāo)準(zhǔn)啟動(dòng)模式也是系統(tǒng)默認(rèn)的啟動(dòng)模式乡小,每啟動(dòng)一個(gè)Activity,都會(huì)重新創(chuàng)建一個(gè)實(shí)例饵史,不管這個(gè)實(shí)例是否存在满钟,并且我們知道任務(wù)棧是"先進(jìn)后出的",所以先進(jìn)棧的A位于棧底胳喷,最后一個(gè)Activity B位于棧頂湃番。

2.當(dāng)B Acticity的啟動(dòng)模式是singleTask 棧內(nèi)復(fù)用模式時(shí)候,棧內(nèi)的情況是這樣的:


情形2(a)

因?yàn)锽 的實(shí)例在棧內(nèi)存在吭露,所以再次啟動(dòng)的時(shí)候吠撮,就不會(huì)重新創(chuàng)建實(shí)例了,所以B 回到棧頂讲竿,并且B 上面的 實(shí)例會(huì)被移出棧泥兰,最終任務(wù)棧內(nèi)的情況是這樣的:


情形2(b)

回到我開頭說(shuō)的那個(gè)問(wèn)題,啟動(dòng)一個(gè) 啟動(dòng)模式為 SingleTask 的Activity题禀,為什么會(huì)在onCreate()方法里鞋诗,拿不到Bundle傳遞的值?

原因也很簡(jiǎn)單迈嘹,假設(shè)在任務(wù)棧中存在該Activity的實(shí)例削彬,再次啟動(dòng)的時(shí)候,也就不會(huì)重新去創(chuàng)建它的實(shí)例江锨,onCreate方法并沒有執(zhí)行吃警,也就獲取不到Bundle傳遞過(guò)來(lái)的值。此時(shí)啄育,我們需要重寫 onNewIntent()方法酌心,系統(tǒng)會(huì)回調(diào)其onNewIntent方法,并將 onNewIntent 接收的 intent設(shè)置給 Activity挑豌。之后安券,我們可以在 onStart()方法中接收Bundle傳遞過(guò)來(lái)的值墩崩。

假設(shè)任務(wù)棧內(nèi)不存在該Activity的實(shí)例,就會(huì)重新創(chuàng)建侯勉,其生命周期方法onCreate()鹦筹,onStart(),onResume() 都會(huì)正常執(zhí)行址貌。

3.感悟

Activity作為四大組件之一铐拐,其重要性不言而喻,除了生命周期之外练对,它的啟動(dòng)模式也是一個(gè)重點(diǎn)和難點(diǎn)遍蟋,找工作面試被問(wèn)的概率還是很大,當(dāng)然更重要的是螟凭,我們?nèi)粘i_發(fā)工作的時(shí)候虚青,為了滿足某些項(xiàng)目的特殊需求,就必須使用到Activity的啟動(dòng)模式螺男,所以我們必須要掌握其四種啟動(dòng)模式棒厘。

Android技術(shù)討論Q群: 947460837?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市下隧,隨后出現(xiàn)的幾起案子奢人,更是在濱河造成了極大的恐慌,老刑警劉巖淆院,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件达传,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡迫筑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門宗弯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脯燃,“玉大人,你說(shuō)我怎么就攤上這事蒙保≡铮” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵邓厕,是天一觀的道長(zhǎng)逝嚎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)详恼,這世上最難降的妖魔是什么补君? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮昧互,結(jié)果婚禮上挽铁,老公的妹妹穿的比我還像新娘伟桅。我一直安慰自己,他們只是感情好叽掘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布楣铁。 她就那樣靜靜地躺著,像睡著了一般更扁。 火紅的嫁衣襯著肌膚如雪盖腕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天浓镜,我揣著相機(jī)與錄音溃列,去河邊找鬼。 笑死竖哩,一個(gè)胖子當(dāng)著我的面吹牛哭廉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播相叁,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼遵绰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了增淹?” 一聲冷哼從身側(cè)響起椿访,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虑润,沒想到半個(gè)月后成玫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拳喻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年哭当,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冗澈。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钦勘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出亚亲,到底是詐尸還是另有隱情彻采,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布捌归,位于F島的核電站肛响,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惜索。R本人自食惡果不足惜特笋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望门扇。 院中可真熱鬧雹有,春花似錦偿渡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至质帅,卻和暖如春适揉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背煤惩。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工嫉嘀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人魄揉。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓剪侮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親洛退。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓣俯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 一、概述 Activity 作為與用戶交互的一個(gè)窗口兵怯,是使用非常頻繁的一個(gè)基本組件彩匕。Android系統(tǒng)是通過(guò)Act...
    三也視界閱讀 2,227評(píng)論 3 11
  • 第一章主要講了以下幾個(gè)知識(shí)點(diǎn): Activity生命周期 Activity的啟動(dòng)模式 IntentFilter匹配...
    Utte閱讀 1,147評(píng)論 0 3
  • 登錄 小豬快跑22 關(guān)注 一個(gè)實(shí)例讓你徹底明白Activity的4種啟動(dòng)模式 原創(chuàng) 2017年08月03日 14:...
    奔跑的蟲子閱讀 549評(píng)論 0 0
  • 【Android Activity】 什么是 Activity? 四大組件之一,通常一個(gè)用戶交互界面對(duì)應(yīng)一個(gè) ac...
    Rtia閱讀 3,796評(píng)論 3 18
  • 在一個(gè)項(xiàng)目中會(huì)包括著多個(gè)Activity,系統(tǒng)中使用任務(wù)棧來(lái)存儲(chǔ)創(chuàng)建的Activity實(shí)例媒区,任務(wù)棧是一種“后進(jìn)先出...
    CQ_TYL閱讀 786評(píng)論 0 4