《Android開發(fā)藝術(shù)探索》第一章筆記(二) Activity啟動(dòng)模式理解

明天就是端午節(jié)了,先在這里預(yù)祝大家端午節(jié)快樂(lè)误褪!
記得以前的這個(gè)時(shí)候责鳍,一般都是請(qǐng)幾天假,湊夠一周兽间,出去浪一圈再回來(lái)历葛,哈哈,今年嘀略,因?yàn)橐恍﹤€(gè)人原因吧恤溶,這次沒(méi)有去遠(yuǎn)方,想安安靜靜的沉淀下自己帜羊,整理下思路咒程,該何去何從。

想想那個(gè)時(shí)候的勇氣逮壁,現(xiàn)在也要勇敢前行

接著上一章的 《Android開發(fā)藝術(shù)探索》第一章筆記(一) Activity超詳細(xì)的生命周期理解 后孵坚,下面來(lái)復(fù)習(xí)下Activity的啟動(dòng)模式。話說(shuō)窥淆,我也是經(jīng)常用到其中的兩種卖宠,嘻嘻...。

圖片來(lái)自網(wǎng)絡(luò)

兩個(gè)要點(diǎn):

  • Activitry的LaunchMode
  • Activity的Flags

一 Activitry的LaunchMode

一個(gè)應(yīng)用程序通常被拆分為多個(gè)Activity,在默認(rèn)情況下忧饭,當(dāng)我們多次啟動(dòng)同一個(gè)activity時(shí)扛伍,系統(tǒng)會(huì)創(chuàng)建多個(gè)實(shí)例并把它們放入任務(wù)棧中,任務(wù)棧是一種“ 后進(jìn)先出 ”的棧結(jié)構(gòu)词裤。除了默認(rèn)的情況刺洒,還有其他的情況。目前有四種啟動(dòng)模式:

  • standard(默認(rèn))
  • singleTop
  • singleTask
  • singleInstance
(1) standard(默認(rèn)) :標(biāo)準(zhǔn)模式吼砂,一調(diào)用startActivity()方法就會(huì)產(chǎn)生一個(gè)新的實(shí)例逆航,不管這個(gè)實(shí)例是否已經(jīng)存在。
(2) singleTop :棧頂復(fù)用模式渔肩,如果某個(gè)Activity的Launch mode設(shè)置成singleTop因俐,那么當(dāng)該Activity位于棧頂?shù)臅r(shí)候,再通過(guò)Intent跳轉(zhuǎn)到本身這個(gè)Activity,則將不會(huì)創(chuàng)建一個(gè)新的實(shí)例壓入棧中抹剩。如果新Activity的實(shí)例已經(jīng)存在但不是位于棧頂撑帖,那么新Activity仍然會(huì)重新重建。

例如:現(xiàn)在棧的情況為:A B C D澳眷。D的Launch mode設(shè)置成了singleTop胡嘿,那么在D中啟動(dòng)Intent跳轉(zhuǎn)到D,那么將不會(huì)新創(chuàng)建一個(gè)D的實(shí)例壓入棧中钳踊,此時(shí)棧的情況依然為:A B C D衷敌。但是如果此時(shí)B的模式也是singleTop,D跳轉(zhuǎn)到B拓瞪,那么則會(huì)新建一個(gè)B的實(shí)例壓入棧中逢享,因?yàn)榇藭r(shí)B不是位于棧頂,此時(shí)棧的情況就變成了:A B C D B吴藻。

(3)singleTask :棧內(nèi)復(fù)用模式瞒爬。這是一種單例模式,如果某個(gè)Activity是singleTask模式沟堡,那么Task棧中將會(huì)只有一個(gè)該Activity的實(shí)例侧但。

例如:現(xiàn)在棧的情況為:A B C D。B的Launch mode為singleTask航罗,此時(shí)D通過(guò)Intent跳轉(zhuǎn)到B禀横,則棧的情況變成了:A B。而C和D被彈出銷毀了粥血,也就是說(shuō)位于B之上的實(shí)例都被銷毀了柏锄。

(4)singleInstance :單實(shí)例模式,這是一種加強(qiáng)的singleTask模式复亏,它除了具有singleTask模式的所有特性之外趾娃,還加強(qiáng)了一點(diǎn),那就是此種模式的Activity只能單獨(dú)地位于一個(gè)任務(wù)棧中缔御。

例如:Task棧1的情況為:A B C抬闷。C通過(guò)Intent跳轉(zhuǎn)到D,而D的Launch mode為singleInstance耕突,則將會(huì)新建一個(gè)Task棧2笤成。此時(shí)Task棧1的情況還是為:A B C。Task棧2的情況為:D眷茁。此時(shí)屏幕界面顯示D的內(nèi)容炕泳,

如果這時(shí)D又通過(guò)Intent跳轉(zhuǎn)到D,則Task棧2中也不會(huì)新建一個(gè)D的實(shí)例上祈,所以兩個(gè)棧的情況也不會(huì)變化培遵。而如果D跳轉(zhuǎn)到C挣磨,則棧1的情況變成了:A B C C,因?yàn)镃的Launch mode為standard荤懂,此時(shí)如果再按返回鍵,則棧1變成:A B C塘砸。也就是說(shuō)現(xiàn)在界面還顯示C的內(nèi)容节仿,不是D。
好了掉蔬,現(xiàn)在有一個(gè)問(wèn)題就是這時(shí)這種情況下如果用戶點(diǎn)擊了Home鍵廊宪,則再也回不到D的即時(shí)界面了。如果想解決這個(gè)問(wèn)題女轿,可以為D在Manifest.xml文件中的聲明加上

<intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter>

加上這段之后箭启,也就是說(shuō)該程序中有兩個(gè)這種聲明,另一個(gè)就是那個(gè)正常的根 activity蛉迹,在打成apk包安裝之后傅寡,在程序列表中能看到兩個(gè)圖標(biāo),但是如果都運(yùn)行的話北救,在任務(wù)管理器中其實(shí)也只有一個(gè)荐操。上面的情況點(diǎn)擊D的那個(gè)圖標(biāo)就能回到它的即時(shí)界面(比如一個(gè)EditText,以前輸入的內(nèi)容珍策,現(xiàn)在回到之后依然存在)托启。

二 Activity的Flags

Activity的Flags有很多,這里看一些常用的標(biāo)記位攘宙。

FLAG_ACTIVITY_NEW_TASK

其效果和在XML中指定啟動(dòng)“singleTask”模式相同

FLAG_ACTIVITY_SINGLE_TOP

如果設(shè)置屯耸,當(dāng)這個(gè)Activity位于歷史stack的頂端運(yùn)行時(shí),不再啟動(dòng)一個(gè)新的蹭劈。

FLAG_ACTIVITY_CLEAR_TOP

如果設(shè)置疗绣,并且這個(gè)Activity已經(jīng)在當(dāng)前的Task中運(yùn)行,因此铺韧,不再是重新啟動(dòng)一個(gè)這個(gè)Activity的實(shí)例持痰,而是在這個(gè)Activity上方的所有Activity都將關(guān)閉,然后這個(gè)Intent會(huì)作為一個(gè)新的Intent投遞到老的Activity(現(xiàn)在位于頂端)中祟蚀。

-------- 例如愈魏,假設(shè)一個(gè)Task中包含這些Activity:A莹规,B,C,D矿微。如果D調(diào)用了startActivity(),并且包含一個(gè)指向Activity B的Intent旷余,那么空闲,C和D都將結(jié)束,然后B接收到這個(gè)Intent,因此匀借,目前stack的狀況是:A颜阐,B。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

如果設(shè)置吓肋,新的Activity不會(huì)在最近啟動(dòng)的Activity的列表中保存凳怨。

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

這個(gè)標(biāo)志一般不由應(yīng)用程序代碼設(shè)置,如果這個(gè)Activity是從歷史記錄里啟動(dòng)的(常按HOME鍵)是鬼,那么肤舞,系統(tǒng)會(huì)幫你設(shè)定。

FLAG_ACTIVITY_NO_HISTORY

使用這個(gè)模式啟動(dòng)Activity均蜜,當(dāng)該Activity啟動(dòng)其他Activity后李剖,該Activity消失了,不會(huì)保留在棧Activity中囤耳。

還有一些篙顺,可以去參考官方文檔,我們不必去死記硬背充择,理解即可~

晚安慰安,好夢(mèng)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市聪铺,隨后出現(xiàn)的幾起案子化焕,更是在濱河造成了極大的恐慌,老刑警劉巖铃剔,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撒桨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡键兜,警方通過(guò)查閱死者的電腦和手機(jī)凤类,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)普气,“玉大人谜疤,你說(shuō)我怎么就攤上這事∠志鳎” “怎么了夷磕?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)仔沿。 經(jīng)常有香客問(wèn)我坐桩,道長(zhǎng),這世上最難降的妖魔是什么封锉? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任绵跷,我火速辦了婚禮膘螟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碾局。我一直安慰自己荆残,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布净当。 她就那樣靜靜地躺著内斯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚯瞧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天品擎,我揣著相機(jī)與錄音埋合,去河邊找鬼。 笑死萄传,一個(gè)胖子當(dāng)著我的面吹牛甚颂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秀菱,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼振诬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了衍菱?” 一聲冷哼從身側(cè)響起赶么,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脊串,沒(méi)想到半個(gè)月后辫呻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琼锋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年放闺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缕坎。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怖侦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谜叹,到底是詐尸還是另有隱情匾寝,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布荷腊,位于F島的核電站旗吁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏停局。R本人自食惡果不足惜很钓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一香府、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧码倦,春花似錦企孩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至推汽,卻和暖如春补疑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歹撒。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工莲组, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暖夭。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓锹杈,卻偏偏與公主長(zhǎng)得像迈着,于是被迫代替她去往敵國(guó)和親竭望。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裕菠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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