Android-activity的啟動模式

Activity的LanchMode

在默認情況下赏表,我們多次啟動同一個Activity時,系統(tǒng)會創(chuàng)建多個實例并把他們放入到任務棧中蜡秽,每當按back鍵返回代赁,處于棧頂?shù)腁ctivity就會出棧,一直下去踊兜,知道棧為空竿滨。任務棧與數(shù)據(jù)結構棧模式一致,都是“后進先出”捏境。那么于游,對于同一次活動,如果我們多次啟動垫言,就多次創(chuàng)建相同的實例贰剥,這樣其實在某些情況下對資源的利用是一種浪費,因此筷频,安卓開發(fā)中就有了四種啟動模式:standard蚌成、singleTop、singleTask凛捏、singlnstance

(1)standard

系統(tǒng)的默認模式為標準模式担忧,這種模式下,每一次啟動activity都會重新創(chuàng)建一個實例葵袭,然后放入任務棧中(即使棧中已經存在了這個實例涵妥。那么這個acitivity的生命周期符合經典情況下的生命周期,如onCreate等坡锡。

  • 需要注意的是蓬网,每個實例可以屬于不同的棧,誰啟動了Activity鹉勒,Activity就會進入到對應的棧帆锋。
  • 因ApplicationContext沒有任務棧,所以無法采用標準模式啟動Activity禽额。但可通過為待啟動的Activity指定標記位:FLAG_ACTIVITY_NEW_TASK锯厢,那么在啟動時就會為其創(chuàng)建一個新的任務棧(這實際上是采用了singleTask啟動模式)
(2)singleTop

棧頂復用模,其實很好理解脯倒,就是如果啟動的Activity已經存在于當前任務棧的棧頂实辑,那么就可以復用棧頂?shù)倪@個實例,而不會重新創(chuàng)建一個新的實例藻丢,這樣子對于資源的利用率就提高了剪撬。
需要注意的是,在這種情況下悠反,onCreate残黑、onStart不會被系統(tǒng)調用,因為這個實例并沒有改變斋否。并且梨水,如果新啟動的活動沒有位于棧頂,仍然會被重新創(chuàng)建茵臭。


棧頂復用
(3)singleTask

棧內復用模式疫诽。同樣很好理解,只要新啟動的Activity于任務棧中已經存在旦委,那么系統(tǒng)不會再重新創(chuàng)建該實例踊沸,而是把存在的棧調到棧頂并調用onNewIntent方法。


棧內復用
(4)singleInstance

單實例模式社证。它除了具有singleTask模式的所有特性之外逼龟,還要求Activity只能位于一個單獨地任務棧中。那么追葡,由于棧內復用的特性腺律,后續(xù)再次啟動都不會創(chuàng)建新的實例,除非這個棧被系統(tǒng)回收宜肉。

啟動模式的指定方法

上面簡單介紹了活動的啟動模式匀钧,其實并不難理解,接下來看一個啟動模式如何指定谬返。

1.通過AndroidMenifest指定
<activity 
          android:name="activity"
          android:configChanges="screenLayout"
          android:lanchMode="singleTask"
          android:label="@string/app_name" />
2.通過設置Intent標志位
Intent intent=new Intent(MainActivity.this,secondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)之斯;
startActivity(intent);
標記位屬性及其含義

FLAG_ACTIVITY_SINGLE_TOP 指定啟動模式為棧頂復用模式(singleTop)
FLAG_ACTIVITY_NEW_TASK 指定啟動模式為標準模式(standard)
FLAG_ACTIVITY_CLEAR_TOP 所有位于其上層的Activity都要移除,一般和singleTask啟動模式一起使用

從優(yōu)先級來看遣铝,第二種方式要高于第一種佑刷,如果兩種方式同時存在莉擒,將會以第二種方式為準。但是瘫絮,需要注意涨冀,第二中方式無法為其指定單實例模式;Manifest設置方式無法設定FLAG_ACTIVITY_CLEAR_TOP標識麦萤。

總結

本文簡要介紹了Activity的幾種啟動模式鹿鳖,具體實現(xiàn)讀者可以按照設置方法設置后,結合AS去理解壮莹。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末翅帜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子命满,更是在濱河造成了極大的恐慌涝滴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件周荐,死亡現(xiàn)場離奇詭異狭莱,居然都是意外死亡,警方通過查閱死者的電腦和手機概作,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門腋妙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讯榕,你說我怎么就攤上這事骤素。” “怎么了愚屁?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵济竹,是天一觀的道長。 經常有香客問我霎槐,道長送浊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任丘跌,我火速辦了婚禮袭景,結果婚禮上,老公的妹妹穿的比我還像新娘闭树。我一直安慰自己耸棒,他們只是感情好,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布报辱。 她就那樣靜靜地躺著与殃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幅疼,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天米奸,我揣著相機與錄音,去河邊找鬼衣屏。 笑死躏升,一個胖子當著我的面吹牛辩棒,可吹牛的內容都是我干的狼忱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼一睁,長吁一口氣:“原來是場噩夢啊……” “哼钻弄!你這毒婦竟也來了?” 一聲冷哼從身側響起者吁,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窘俺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后复凳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘤泪,經...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年育八,在試婚紗的時候發(fā)現(xiàn)自己被綠了对途。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡髓棋,死狀恐怖实檀,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情按声,我是刑警寧澤膳犹,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站签则,受9級特大地震影響须床,放射性物質發(fā)生泄漏。R本人自食惡果不足惜渐裂,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一豺旬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芯义,春花似錦哈垢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春求泰,著一層夾襖步出監(jiān)牢的瞬間央渣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工渴频, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芽丹,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓卜朗,卻偏偏與公主長得像拔第,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子场钉,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內容