Android Activity的4種啟動(dòng)模式

關(guān)于Activity啟動(dòng)模式的文章已經(jīng)很多巷疼,但有的文章寫(xiě)得過(guò)于簡(jiǎn)單,有的則過(guò)于注重細(xì)節(jié)灵奖,本文想取一個(gè)折中嚼沿,只關(guān)注最重要和最常用的概念,原理和使用方法瓷患,并提供一個(gè)簡(jiǎn)單的Demo骡尽,便于大家理解。

Activity的啟動(dòng)模式有4種擅编,分別是standard.singleTop. SingleTask. singleInstance攀细,可以在AndroidMainifest.xml文件中指定每一個(gè)Activity的啟動(dòng)模式。一個(gè)Android應(yīng)用一般都會(huì)有多個(gè)Activity爱态,系統(tǒng)會(huì)通過(guò)任務(wù)棧來(lái)管理這些Activity谭贪,棧是一種后進(jìn)先出的集合,當(dāng)前的Activity就在棧頂锦担,按返回鍵俭识,棧頂Activity就會(huì)退出。Activity啟動(dòng)模式不同洞渔,系統(tǒng)通過(guò)任務(wù)棧管理Activity的方式也會(huì)不同套媚,以下將分別介紹。

1磁椒、Standard模式

Standard模式是Android的默認(rèn)啟動(dòng)模式堤瘤,你不在配置文件中做任何設(shè)置,那么這個(gè)Activity就是standard模式浆熔,這種模式下本辐,Activity可以有多個(gè)實(shí)例,每次啟動(dòng)Activity医增,無(wú)論任務(wù)棧中是否已經(jīng)有這個(gè)Activity的實(shí)例师郑,系統(tǒng)都會(huì)創(chuàng)建一個(gè)新的Activity實(shí)例。

什么時(shí)候用standard模式呢调窍?standartd模式是activity的默認(rèn)模式宝冕,大部分情況下,都應(yīng)該使用這種模式邓萨,也就是在配置文件中什么都不用做地梨,當(dāng)確實(shí)有特殊需求時(shí)菊卷,再考慮其他模式。

2宝剖、SingleTop模式

SingleTop模式和standard模式非常相似洁闰,主要區(qū)別就是當(dāng)一個(gè)singleTop模式的Activity已經(jīng)位于任務(wù)棧的棧頂,再去啟動(dòng)它時(shí)万细,不會(huì)再創(chuàng)建新的實(shí)例扑眉,不過(guò)會(huì)調(diào)用onNewIntent()函數(shù),如果不位于棧頂赖钞,就會(huì)創(chuàng)建新的實(shí)例腰素,現(xiàn)在把配置文件中FirstActivity的啟動(dòng)模式改為SingleTop,我們的應(yīng)用只有一個(gè)Activity雪营,F(xiàn)irstActivity自然處于任務(wù)棧的棧頂弓千。

? 當(dāng)一個(gè)Activity已經(jīng)在棧頂,但依然有可能啟動(dòng)它献起,而你又不想產(chǎn)生新的Activity實(shí)例洋访,此時(shí)就可以用singleTop模式。例如谴餐,一個(gè)搜索Activity姻政,可以輸入搜索內(nèi)容,也可以產(chǎn)生搜索結(jié)果岂嗓,此時(shí)就可以用singleTop模式扶歪,不會(huì)用戶每次搜索都會(huì)產(chǎn)生一個(gè)實(shí)例。

3摄闸、SingleTask模式

? SingleTask模式的Activity在同一個(gè)Task內(nèi)只有一個(gè)實(shí)例,如果Activity已經(jīng)位于棧頂妹萨,系統(tǒng)不會(huì)創(chuàng)建新的Activity實(shí)例年枕,和singleTop模式一樣。但Activity已經(jīng)存在但不位于棧頂時(shí)乎完,系統(tǒng)就會(huì)把該Activity移到棧頂熏兄,并把它上面的activity出棧。

singleTask模式和前面兩種模式的最大區(qū)別就是singleTask模式是任務(wù)內(nèi)單例的树姨,所以我們是否設(shè)定Activity為singleTask模式摩桶,就是看我們activity是否需要單例,例如你的某個(gè)Activity

里面有一個(gè)列表帽揪,如果有多個(gè)實(shí)例硝清,有可能導(dǎo)致用戶看到的列表不一致,有的Activity需要經(jīng)常啟動(dòng)转晰,如果每次都創(chuàng)建實(shí)例芦拿,會(huì)導(dǎo)致占用資源過(guò)多士飒,這些情況都可以使用singleTask模式,但啟動(dòng)singleTask模式的Activity會(huì)導(dǎo)致任務(wù)棧內(nèi)它上面的Activity被銷毀蔗崎,有可能會(huì)影響用戶體驗(yàn)酵幕,使用時(shí)要注意。

4缓苛、SingleInstance模式

singleInstance模式也是單例的芳撒,但和singleTask不同,singleTask只是任務(wù)棧內(nèi)單例未桥,系統(tǒng)里是可以有多個(gè)singleTask Activity實(shí)例的笔刹,而singleInstance Activity在整個(gè)系統(tǒng)里只有一個(gè)實(shí)例,啟動(dòng)一singleInstanceActivity時(shí)钢属,系統(tǒng)會(huì)創(chuàng)建一個(gè)新的任務(wù)棧徘熔,并且這個(gè)任務(wù)棧只有他一個(gè)Activity。

SingleInstance模式并不常用淆党,如果我們把一個(gè)Activity設(shè)置為singleInstance模式酷师,你會(huì)發(fā)現(xiàn)它啟動(dòng)時(shí)會(huì)慢一些,切換效果不好染乌,影響用戶體驗(yàn)山孔。它往往用于多個(gè)應(yīng)用之間,例如一個(gè)電視launcher里的Activity荷憋,通過(guò)遙控器某個(gè)鍵在任何情況可以啟動(dòng)台颠,這個(gè)Activity就可以設(shè)置為singleInstance模式,當(dāng)在某應(yīng)用中按鍵啟動(dòng)這個(gè)Activity勒庄,處理完后按返回鍵串前,就會(huì)回到之前啟動(dòng)它的應(yīng)用,不影響用戶體驗(yàn)实蔽。

以上分析了Activity的4種啟動(dòng)模式荡碾,將Activity設(shè)置為哪種啟動(dòng)模式并沒(méi)有標(biāo)準(zhǔn)答案,有時(shí)候局装,你可能發(fā)現(xiàn)將某個(gè)Activity設(shè)置為一種啟動(dòng)模式或者另一種啟動(dòng)模式坛吁,并沒(méi)有明顯區(qū)別,而具體的評(píng)判標(biāo)準(zhǔn)就是看哪種模式更滿足應(yīng)用功能铐尚,更有利于用戶體驗(yàn)拨脉。

備注: Demo下載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宣增,隨后出現(xiàn)的幾起案子玫膀,更是在濱河造成了極大的恐慌,老刑警劉巖爹脾,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匆骗,死亡現(xiàn)場(chǎng)離奇詭異劳景,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)碉就,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門盟广,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瓮钥,你說(shuō)我怎么就攤上這事筋量。” “怎么了碉熄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵桨武,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我锈津,道長(zhǎng)呀酸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任琼梆,我火速辦了婚禮性誉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茎杂。我一直安慰自己错览,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布煌往。 她就那樣靜靜地躺著倾哺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刽脖。 梳的紋絲不亂的頭發(fā)上羞海,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音曲管,去河邊找鬼却邓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛翘地,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播癌幕,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼衙耕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了勺远?” 一聲冷哼從身側(cè)響起橙喘,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胶逢,沒(méi)想到半個(gè)月后厅瞎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饰潜,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年和簸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彭雾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锁保,死狀恐怖薯酝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爽柒,我是刑警寧澤吴菠,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站浩村,受9級(jí)特大地震影響做葵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜心墅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一酿矢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗓化,春花似錦棠涮、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至谦屑,卻和暖如春驳糯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氢橙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工酝枢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悍手。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓帘睦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坦康。 傳聞我的和親對(duì)象是個(gè)殘疾皇子竣付,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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

  • 引言 對(duì)Android的啟動(dòng)模式還有些印象,現(xiàn)在項(xiàng)目的一個(gè)需求是:登錄頁(yè)是一個(gè)登錄選擇頁(yè)滞欠,包含了帳號(hào)密碼登錄古胆、手機(jī)...
    OzanShareing閱讀 1,209評(píng)論 0 2
  • 今天想來(lái)說(shuō)說(shuō)Android的啟動(dòng)模式,一來(lái)自己做一個(gè)總結(jié)筛璧,二來(lái)如果能幫助到別人就更好了~ 首先來(lái)看一個(gè)實(shí)際的業(yè)務(wù)場(chǎng)...
    JxYoung閱讀 8,004評(píng)論 27 62
  • 引言 當(dāng)面試官說(shuō)請(qǐng)你介紹一下activity啟動(dòng)模式逸绎,大多數(shù)人都能整兩句惹恃,什么棧頂復(fù)用啊棧內(nèi)復(fù)用啊,不過(guò)棺牧,你確定你...
    吳七禁閱讀 7,018評(píng)論 8 76
  • 第一章主要講了以下幾個(gè)知識(shí)點(diǎn): Activity生命周期 Activity的啟動(dòng)模式 IntentFilter匹配...
    Utte閱讀 1,149評(píng)論 0 3
  • activity啟動(dòng)模式是android開(kāi)發(fā)中的基礎(chǔ)知識(shí)巫糙,面試中也經(jīng)常被問(wèn)到,不過(guò)剛?cè)腴T的時(shí)候看到網(wǎng)上眾多介紹ac...
    sunhapper閱讀 4,297評(píng)論 1 17