Android:四種啟動(dòng)模式

一、安卓四種啟動(dòng)模式


思維導(dǎo)圖.png

1、Standard 標(biāo)準(zhǔn)模式

  • 說明: 默認(rèn)模染苛,每次啟動(dòng)一個(gè)Activity都會(huì)又一次創(chuàng)建一個(gè)新的實(shí)例入棧,無論這個(gè)實(shí)例是否存在主到。
  • 生命周期:每次創(chuàng)建實(shí)例Activity它的onCreate茶行、onStart贸呢、onResume都會(huì)被調(diào)用。
  • 舉例
    standard.png


2拢军、SingleTop 棧頂復(fù)用模式

  • 說明:分兩種處理情況:須要?jiǎng)?chuàng)建的Activity已經(jīng)處于棧頂時(shí)楞陷,此時(shí)會(huì)直接復(fù)用棧頂?shù)腁ctivity;若須要?jiǎng)?chuàng)建的Activity不處于棧頂茉唉,此時(shí)會(huì)創(chuàng)建一個(gè)新的Activity入棧固蛾,同Standard模式一樣。
  • 生命周期:若情況一中棧頂?shù)腁ctivity被直接復(fù)用時(shí)度陆,它的onCreate艾凯、onStart不會(huì)被系統(tǒng)調(diào)用,由于它并沒有發(fā)生改變懂傀。而是一個(gè)新的方法onNewIntent會(huì)被回調(diào)(Activity被正常創(chuàng)建時(shí)不會(huì)回調(diào)此方法)趾诗。
  • 舉例
    SingleTop.png


2、SingleTask 棧內(nèi)復(fù)用模式

  • 說明:若須要?jiǎng)?chuàng)建的Activity已經(jīng)處于棧中時(shí)蹬蚁,此時(shí)不會(huì)創(chuàng)建新的Activity恃泪,而是其上面的其他Activity全部銷毀,使其成為棧頂犀斋。
  • 生命周期:同SingleTop 模式中的情況一同樣贝乎。僅僅會(huì)又一次回調(diào)Activity中的 onNewIntent方法
  • 舉例
    SingleTask.png


4、SingleInstance 單實(shí)例模式

  • 說明: SingleInstance比較特殊叽粹,是全局單例模式览效,是一種加強(qiáng)的SingleTask模式。它除了具有它所有特性外虫几,還加強(qiáng)了一點(diǎn):具有此模式的Activity僅僅能單獨(dú)位于一個(gè)任務(wù)棧中锤灿。
    這個(gè)經(jīng)常使用于系統(tǒng)中的應(yīng)用,比如Launch辆脸、鎖屏鍵的應(yīng)用等等但校,整個(gè)系統(tǒng)中僅僅有一個(gè)!
  • 舉例:比方 A Activity是該模式每强,啟動(dòng)A后始腾。系統(tǒng)會(huì)為它創(chuàng)建一個(gè)單獨(dú)的任務(wù)棧,由于棧內(nèi)復(fù)用的特性空执。興許的請(qǐng)求均不會(huì)創(chuàng)建新的Activity,除非這個(gè)獨(dú)特的任務(wù)棧被系統(tǒng)銷毀穗椅。


二.啟動(dòng)模式的使用方式


1辨绊、在 Manifest.xml中指定Activity啟動(dòng)模式

<activity android:name="..activity.MultiportActivity" android:launchMode="singleTask"/>

2、啟動(dòng)Activity時(shí)匹表,在Intent中指定啟動(dòng)模式去創(chuàng)建Activity

Intent intent = new Intent();
intent.setClass(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

注意:以上兩種方式都能夠?yàn)锳ctivity指定啟動(dòng)模式门坷,可是二者還是有差別的宣鄙。

  • (1)優(yōu)先級(jí):動(dòng)態(tài)指定方式比靜態(tài)指定優(yōu)先級(jí)要高,若兩者同時(shí)候存在默蚌,以動(dòng)態(tài)指定方式為準(zhǔn)冻晤。
  • (2)限定范圍:靜態(tài)指定方式無法為Activity直接指定 FLAG_ACTIVITY_CLEAR_TOP 標(biāo)識(shí),動(dòng)態(tài)指定方式無法為Activity指定 singleInstance 模式绸吸。


三. Activity 的 Flags


1. FLAG_ACTIVITY_NEW_TASK

(1)首先會(huì)查找是否存在和被啟動(dòng)的Activity具有相同的親和性(即taskAffinity)的任務(wù)棧鼻弧;

(2)同一個(gè)應(yīng)用程序中的activity的親和性(taskAffinity)相同,默認(rèn)為包名

(3)如果有锦茁,則直接把這個(gè)棧整體移動(dòng)到前臺(tái)攘轩,并保持棧中舊activity的順序不變,然后被啟動(dòng)的Activity會(huì)被壓入棧

(4)如果沒有码俩,則新建一個(gè)棧來存放被啟動(dòng)的activity

<activity
  android:name=".ui.activity.OtherTaskActivityXXX"
  android:taskAffinity="android.task.browser"/> //注意這里的 taskAffinity

2. FLAG_ACTIVITY_SINGLE_TOP

作用是為Activity指定 “SingleTop”啟動(dòng)模式度帮,跟在AndroidMainfest.xml指定效果同樣。

3. FLAG_ACTIVITY_CLEAR_TASK

在新活動(dòng)啟動(dòng)前稿存,與新活動(dòng)關(guān)聯(lián)的任務(wù)被清空笨篷。也就是說,新活動(dòng)成為新任務(wù)的根瓣履,舊的活動(dòng)都被結(jié)束了冕屯。本flag只能與FLAG_ACTIVITY_NEW_TASK聯(lián)合使用。

4. FLAG_ACTIVITY_CLEAN_TOP

(1)當(dāng)前任務(wù)棧不存在要啟動(dòng)的Activity拂苹,同一般啟動(dòng)安聘;

(2)當(dāng)前任務(wù)棧已存在要啟動(dòng)的Activity:

  • 啟動(dòng)模式默認(rèn)(multiple)并且不加FLAG_ACTIVITY_SINGLE_TOP,會(huì)清除自己及自己上面的任務(wù)瓢棒,然后在重新創(chuàng)建自己
  • 其他啟動(dòng)模式浴韭,或者添加了FLAG_ACTIVITY_SINGLE_TOP,則只會(huì)清除自己上面的任務(wù)脯宿,然后調(diào)用自己的onNewIntent()

5. FLAG_ACTIVITY_REORDER_TO_FRONT

ABCD -> 再啟動(dòng)B -> ACDB

5.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

具有此標(biāo)記位的Activity不會(huì)出現(xiàn)在歷史Activity的列表中念颈,使用場(chǎng)景:當(dāng)某些情況下我們不希望用戶通過歷史列表回到Activity時(shí),此標(biāo)記位便體現(xiàn)了它的效果连霉。它等同于在xml中指定Activity的屬性:

android:excludeFromRecents="trure"


四. 啟動(dòng)模式的實(shí)際應(yīng)用場(chǎng)景

1. SingleTask模式的運(yùn)用場(chǎng)景

最常見的應(yīng)用場(chǎng)景就是保持我們應(yīng)用開啟后僅僅有一個(gè)Activity的實(shí)例榴芳。最典型的樣例就是應(yīng)用中展示的主頁(Home頁)。
假設(shè)用戶在主頁跳轉(zhuǎn)到其他頁面跺撼,運(yùn)行多次操作后想返回到主頁窟感,假設(shè)不使用SingleTask模式,在點(diǎn)擊返回的過程中會(huì)多次看到主頁歉井,這明顯就是設(shè)計(jì)不合理了柿祈。

2. SingleTop模式的運(yùn)用場(chǎng)景

假設(shè)你在當(dāng)前的Activity中又要啟動(dòng)同類型的Activity,此時(shí)建議將此類型Activity的啟動(dòng)模式指定為SingleTop,能夠降低Activity的創(chuàng)建躏嚎,節(jié)省內(nèi)存蜜自!

3. 注意:復(fù)用Activity時(shí)的生命周期回調(diào)

當(dāng)一個(gè)Activity設(shè)置了SingleTop或者SingleTask模式后,這時(shí)我們須要另外一個(gè)回調(diào) onNewIntent(Intent intent)方法卢佣。

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    initData();
    initView();
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載重荠,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末虚茶,一起剝皮案震驚了整個(gè)濱河市戈鲁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌媳危,老刑警劉巖荞彼,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異待笑,居然都是意外死亡鸣皂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門暮蹂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寞缝,“玉大人,你說我怎么就攤上這事仰泻【B剑” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵集侯,是天一觀的道長(zhǎng)被啼。 經(jīng)常有香客問我,道長(zhǎng)棠枉,這世上最難降的妖魔是什么浓体? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮辈讶,結(jié)果婚禮上命浴,老公的妹妹穿的比我還像新娘。我一直安慰自己贱除,他們只是感情好生闲,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著月幌,像睡著了一般碍讯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上飞醉,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天冲茸,我揣著相機(jī)與錄音屯阀,去河邊找鬼缅帘。 笑死轴术,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钦无。 我是一名探鬼主播逗栽,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼失暂!你這毒婦竟也來了彼宠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤弟塞,失蹤者是張志新(化名)和其女友劉穎凭峡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體决记,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摧冀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了系宫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片索昂。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扩借,靈堂內(nèi)的尸體忽然破棺而出椒惨,到底是詐尸還是另有隱情,我是刑警寧澤潮罪,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布康谆,位于F島的核電站,受9級(jí)特大地震影響嫉到,放射性物質(zhì)發(fā)生泄漏沃暗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一屯碴、第九天 我趴在偏房一處隱蔽的房頂上張望描睦。 院中可真熱鬧,春花似錦导而、人聲如沸忱叭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽韵丑。三九已至,卻和暖如春虚缎,著一層夾襖步出監(jiān)牢的瞬間撵彻,已是汗流浹背钓株。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陌僵,地道東北人轴合。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像碗短,于是被迫代替她去往敵國(guó)和親受葛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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