Android啟動模式

前言

一直知道Activity有幾種啟動模式屉凯,但一直模糊不清萎战,不是從頭去查找相關(guān)資料媳否,還真不知道每一種之間到底是什么區(qū)別特恬。

概念

棧是一種常用的數(shù)據(jù)結(jié)構(gòu)员辩,棧只允許訪問棧頂?shù)脑貙τ跅>椭荒苊看卧L問它的棧頂元素,從而可以達(dá)到保護(hù)棧頂元素以下的其他元素.”先進(jìn)后出”或”后進(jìn)先出”就是棧的一大特點(diǎn)鸵鸥,先進(jìn)棧的元素總是要等到后進(jìn)棧的元素出棧以后才能出棧.遞歸就是利用到了系統(tǒng)棧,暫時(shí)保存臨時(shí)結(jié)果,對臨時(shí)結(jié)果進(jìn)行保護(hù).

  • standard 標(biāo)準(zhǔn)模式妒穴,每次都新建一個(gè)實(shí)例對象
  • singleTop 如果在任務(wù)棧頂發(fā)現(xiàn)了相同的實(shí)例則重用宋税,否則新建并壓入棧頂
  • singleTask 如果在任務(wù)棧中發(fā)現(xiàn)了相同的實(shí)例,將其上面的任務(wù)終止并移除讼油,重用該實(shí)例杰赛。否則新建實(shí)例并入棧
  • singleInstance 允許不同應(yīng)用,進(jìn)程線程等共用一個(gè)實(shí)例矮台,無論從何應(yīng)用調(diào)用該實(shí)例都重用

分析

  1. standard

Activity的默認(rèn)加載方法乏屯,該方法會通過跳轉(zhuǎn)到一個(gè)新的activity,同時(shí)將該實(shí)例壓入到棧中(不管該activity是否已經(jīng)存在在Task棧中瘦赫,都是采用new操作)永遠(yuǎn)不會調(diào)用onNewIntent().
例如:棧中順序是A B C D 辰晕,此時(shí)D通過Intent跳轉(zhuǎn)到A,那么棧中結(jié)構(gòu)就變成 A B C D A 确虱,點(diǎn)擊返回按鈕的 顯示順序是 D C B A含友,依次摧毀

  1. singleTop

singleTop模式下,調(diào)跳轉(zhuǎn)的Activity位于棧頂,則不會重新創(chuàng)建一個(gè)新的實(shí)例并調(diào)用其onNewIntent()校辩,否則會創(chuàng)建一個(gè)新的實(shí)例壓入棧頂而不會調(diào)用onNewIntent()窘问。
例如:棧中的結(jié)構(gòu)依為A B C D,這時(shí)候跳轉(zhuǎn)到D宜咒,D不重新被創(chuàng)建惠赫,棧中結(jié)構(gòu)依然是A B C D。如果調(diào)整到B故黑,會創(chuàng)建一個(gè)B實(shí)例儿咱,這時(shí)候棧中結(jié)構(gòu)為A B C D B。

  1. singleTask

如果在棧中已經(jīng)有該Activity的實(shí)例倍阐,就重用該實(shí)例(會調(diào)用實(shí)例的onNewIntent())概疆。重用時(shí),會讓該實(shí)例回到棧頂峰搪,因此在它上面的實(shí)例將會被移除棧岔冀。如果棧中不存在該實(shí)例,將會創(chuàng)建新的實(shí)例放入棧中(此時(shí)不會調(diào)用onNewIntent())
例如:現(xiàn)在棧的結(jié)構(gòu)為:A B C D概耻。此時(shí)D通過Intent跳轉(zhuǎn)到B使套,則棧的結(jié)構(gòu)變成了:A B。其中的C和D被棧彈出銷毀了鞠柄,也就是說位于B之上的實(shí)例都被銷毀了

  1. singleInstance

singleInstance模式下侦高,會將打開的Activity壓入一個(gè)新建的任務(wù)棧中。并讓多個(gè)應(yīng)用共享該棧中的該Activity實(shí)例厌杜。一旦該模式的Activity的實(shí)例存在于某個(gè)棧中奉呛,任何應(yīng)用再激活改Activity時(shí)都會重用該棧中的實(shí)例计螺,其效果相當(dāng)于多個(gè)應(yīng)用程序共享一個(gè)應(yīng)用,不管誰激活該Activity都會進(jìn)入同一個(gè)應(yīng)用中瞧壮。這里可以理解為調(diào)用系統(tǒng)默認(rèn)瀏覽器跳轉(zhuǎn)到瀏覽器頁面登馒。
例如:Task棧1中結(jié)構(gòu)為:A B C ,C通過Intent跳轉(zhuǎn)到了D(D的模式為singleInstance)咆槽,那么則會新建一個(gè)Task棧2陈轿,棧1中結(jié)構(gòu)依舊為A B C,棧2中結(jié)構(gòu)為D秦忿,此時(shí)屏幕中顯示D麦射,之后D通過Intent跳轉(zhuǎn)到D,棧2中不會壓入新的D灯谣,所以2個(gè)棧中的情況沒發(fā)生改變潜秋。如果D跳轉(zhuǎn)到了C,那么就會根據(jù)C對應(yīng)的launchMode的在棧1中進(jìn)行對應(yīng)的操作酬屉,C如果為standard半等,那么D跳轉(zhuǎn)到C,棧1的結(jié)構(gòu)為A B C C 呐萨,此時(shí)點(diǎn)擊返回按鈕杀饵,還是在C,棧1的結(jié)構(gòu)變?yōu)锳 B C谬擦,而不會回到D切距。

Intent Flags

Flags: 表示Intent的標(biāo)志位,常用于Activity的場景中惨远,它和Activity的啟動模式有著密切的聯(lián)系

Intent.FLAG_ACTIVITY_NEW_TASK(默認(rèn))

默認(rèn)的跳轉(zhuǎn)類型,它會重新創(chuàng)建一個(gè)新的Activity,如果是默認(rèn)的或者指定的Affinity和Task一樣的話谜悟,就和標(biāo)準(zhǔn)模式一樣了啟動一個(gè)新的Activity.

FLAG_ACTIVITY_SINGLE_TOP

這個(gè)FLAG就相當(dāng)于啟動模式中的singletop

FLAG_ACTIVITY_CLEAR_TOP

這個(gè)FLAG就相當(dāng)于啟動模式中的SingleTask

FLAG_ACTIVITY_NO_HISTORY

意思就是說用這個(gè)FLAG啟動的Activity,一旦退出北秽,它不會存在于棧中葡幸,比方說!原來是A,B,C這個(gè)時(shí)候再C中以這個(gè)FLAG啟動D的贺氓,D再啟動E蔚叨,這個(gè)時(shí)候棧中情況為A,B,C,E。

參考

Activity啟動模式 及 Intent Flags 與 棧 的關(guān)聯(lián)分析

Android Activity的Launch Mode

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辙培,一起剝皮案震驚了整個(gè)濱河市蔑水,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扬蕊,老刑警劉巖搀别,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尾抑,居然都是意外死亡歇父,警方通過查閱死者的電腦和手機(jī)蒂培,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庶骄,“玉大人毁渗,你說我怎么就攤上這事〉サ螅” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵府适,是天一觀的道長羔飞。 經(jīng)常有香客問我,道長檐春,這世上最難降的妖魔是什么逻淌? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮疟暖,結(jié)果婚禮上卡儒,老公的妹妹穿的比我還像新娘。我一直安慰自己俐巴,他們只是感情好骨望,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著欣舵,像睡著了一般擎鸠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缘圈,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天劣光,我揣著相機(jī)與錄音,去河邊找鬼糟把。 笑死绢涡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的遣疯。 我是一名探鬼主播雄可,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼另锋!你這毒婦竟也來了滞项?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤夭坪,失蹤者是張志新(化名)和其女友劉穎文判,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體室梅,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戏仓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年疚宇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赏殃。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敷待,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仁热,到底是詐尸還是另有隱情榜揖,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布抗蠢,位于F島的核電站举哟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏迅矛。R本人自食惡果不足惜妨猩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秽褒。 院中可真熱鬧壶硅,春花似錦、人聲如沸销斟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽票堵。三九已至扼睬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悴势,已是汗流浹背窗宇。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留特纤,地道東北人军俊。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像捧存,于是被迫代替她去往敵國和親粪躬。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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