Activity生命周期和啟動模式

1. Activity的生存期

(1)onCreate():
?? ?狀態(tài):Activity正在創(chuàng)建
?? ?任務(wù):第一次創(chuàng)建Activity被使用淹父,做初始化工作如setViewContent界面資源本鸣、初始化數(shù)據(jù)才顿,綁定事件活烙。
?? ?注意:此方法傳遞的Bundle属愤,為改Activity異常情況銷毀時保存的狀態(tài)信息揍诽。
(2)onStart():
?? ?狀態(tài):Activity正在啟動愉适,此時Activity由不可見變?yōu)榭梢?/strong>犯助,但不在前臺,不能與用戶交互维咸。
(3)onResume():
?? ?狀態(tài):Activity獲得焦點剂买,此時Activity在可見且在前臺,位于棧頂癌蓖,處于運行狀態(tài)瞬哼。
(4)onPause():
?? ?狀態(tài):Activity正在停止
?? ?任務(wù):啟動或者恢復(fù)另外一個活動的時候會調(diào)動。釋放CPU資源租副,保存關(guān)鍵數(shù)據(jù)坐慰。
(5)onStop():
?? ?狀態(tài):Activity即將停止
?? ?注意:新Activity是對話框模式,onStop()不會執(zhí)行用僧。
(6) onDestroy():
?? ?狀態(tài):Activity即將銷毀
?? ?任務(wù):回收工作结胀,資源釋放
(7)onRestart():
?? ?狀態(tài):Activity 重新啟動,Activity由后臺切換到前臺责循,由不可見到可見糟港。

異常情況下生命周期

(1)橫豎屏切換:
?? ?Acticity 會被銷毀,在 onStop() 之前調(diào)用 onSaveInstanceState()保存當(dāng)前Activity狀態(tài)院仿,與 onPause() 沒有先后關(guān)系秸抚。
?? ? Activity 重建會把 onSaveInstanceState() 保存的數(shù)據(jù)用 Bundle 對象作為參數(shù)傳給 onRestoreInstanceState() 和 onCreate()方法。從時序上來說 onRestoreInstanceState() 在 onStart()之后.
?? ? 注意:onRestoreInstanceState() 和 onCreate() 區(qū)別為其參數(shù) Bundle savedInstanceSate 歹垫,onCreate() 正常啟動 Bundle savedInstanceSate 為空剥汤。


  • 1 完整生命周期:
    ?onCreate();方法與onDestroy();方法之間所經(jīng)歷的。
  • 2 可見生命周期
    ?onStart();方法與onStop();方法之間所經(jīng)歷的排惨,Activity對用戶可見吭敢,可以在onStart();方法中對資源進行加載,onStop();方法中對資源進行釋放若贮。停止狀態(tài)的Activity不會過多占用內(nèi)存省有。
  • 3 前臺生命周期
    ?onResume();與onPause()方法之間所經(jīng)歷的,Activity處于活動狀態(tài)谴麦。

2.Activity啟動模式

  1. standard 標準模式:
    ??系統(tǒng)默認模式蠢沿,每次啟動一個Activity都會創(chuàng)建一個新的實例,不管這個實例已經(jīng)存在匾效,典型一種多實例實現(xiàn)舷蟀,誰啟動了一個Activity,那么這個Activity就在啟動他的Activity的任務(wù)棧中
    注意:使用ApplicationContext 去啟動 standard模式Activity會報錯面哼。
    原因:非Activity類型的Context 并沒有所謂的任務(wù)棧野宜,可以用singleTask模式啟動解決問題

2.singleTop 棧頂復(fù)用模式:
??如果新的Activity已經(jīng)位于任務(wù)棧的棧頂,那么此Activity不會被重新創(chuàng)建魔策,同時它的 onNewIntent() 方法會被回調(diào)匈子,通過此方法能得到當(dāng)前請求的信息
注意:Activity的 onCreate() ,onStart() 不會被調(diào)用,因為它沒有發(fā)生改變胰默。

3.singleTask 棧內(nèi)復(fù)用模式:
??這是一種單實例模式键痛,只要 Activity 在一個任務(wù)棧中已經(jīng)存在,那么多次啟動 Activity不會重新創(chuàng)建新的實例谱煤,會將棧中的Activity調(diào)入棧頂,同時調(diào)用 onNewIntent() 方法。如果棧中不存在唾那,新創(chuàng)建一個 Activity 壓入棧中。
注意:Activity 所需要的任務(wù)棧褪尝。

  • 如果所需要的任務(wù)棧與實例不存在闹获,那么會先創(chuàng)建一個任務(wù)棧,再創(chuàng)建實例并將其放入棧中恼五。
  • 如果所需任務(wù)棧存在實例不存在昌罩,那么直接創(chuàng)建實例放入任務(wù)棧。
  • 如果所需任務(wù)棧與實例都存在灾馒,根據(jù)棧內(nèi)復(fù)用原則茎用,實例不會創(chuàng)建, 會將改實例切換到棧頂并調(diào)用 onNewIntent() 方法睬罗,同時由于 singleTask 默認具有 clearTop 效果轨功,會將改實例上面的所有Activity全部出棧

4.singleInstance 單實例模式:
??與 singleTask 類似容达,這種模式下的 Activity 只能單獨地位于一個任務(wù)棧中古涧。后續(xù)請求均不會創(chuàng)建新的 Activity ,除非改任務(wù)棧銷毀花盐。

3.Activity 任務(wù)棧

  1. 什么是Acticity任務(wù)棧
    ? ? TaskAffinity(任務(wù)相關(guān)性)羡滑,這個參數(shù)標識了一個 Activity 任務(wù)棧所需要的名字菇爪,默認情況下 Activity 所需任務(wù)棧的名字為應(yīng)用的包名,我們可以指定 TaskAffinity屬性柒昏,他主要與 singleTask 啟動模式與 allowTaskReparenting 屬性配對使用凳宙,另外任務(wù)棧分為前臺棧和后臺棧, 后臺棧中的 Activity 位于暫停狀態(tài)职祷,用戶可以通過切換后臺任務(wù)棧再次調(diào)到前臺氏涩。

4.Activity 的Flags

??有的標記位能設(shè)置啟動模式,有的標記位影響 Activity 的運行狀態(tài)有梆,常用的標記位如下

  • FLAG_ACTIVITY_NEW_TASK 為 Activity 指定 singleTask 啟動模式是尖,其效果和在 XML中指定 該啟動模式相同。
  • FLAG_ACTIVITY_SINGLE_TOP 為 Activity 指定 singleTop 啟動模式泥耀,其效果和在 XML中指定 該啟動模式相同饺汹。
  • FLAG_ACTIVITY_CLEAR_TOP 當(dāng)它啟動時,同一任務(wù)棧所有位于它上面的 Activity 都要出棧爆袍。如果這個實例已經(jīng)存在首繁,那么系統(tǒng)會調(diào)用他的 onNewIntent()。singleTask 啟動模式默認具有此標記效果陨囊。
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 標記的 Activity 不會出現(xiàn)在歷史 Activity 的列表中弦疮。等同于 XML 中指定 Activity 的屬性 android:excludeFromRecents="true"。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜘醋,一起剝皮案震驚了整個濱河市胁塞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌压语,老刑警劉巖啸罢,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胎食,居然都是意外死亡扰才,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門厕怜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衩匣,“玉大人,你說我怎么就攤上這事粥航±拍螅” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵递雀,是天一觀的道長柄延。 經(jīng)常有香客問我,道長缀程,這世上最難降的妖魔是什么搜吧? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任市俊,我火速辦了婚禮,結(jié)果婚禮上滤奈,老公的妹妹穿的比我還像新娘秕衙。我一直安慰自己,他們只是感情好僵刮,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹦牛,像睡著了一般搞糕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上曼追,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天窍仰,我揣著相機與錄音,去河邊找鬼礼殊。 笑死驹吮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晶伦。 我是一名探鬼主播碟狞,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婚陪!你這毒婦竟也來了族沃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤泌参,失蹤者是張志新(化名)和其女友劉穎脆淹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沽一,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡盖溺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铣缠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烘嘱。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖攘残,靈堂內(nèi)的尸體忽然破棺而出拙友,到底是詐尸還是另有隱情,我是刑警寧澤歼郭,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布遗契,位于F島的核電站,受9級特大地震影響病曾,放射性物質(zhì)發(fā)生泄漏牍蜂。R本人自食惡果不足惜漾根,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲫竞。 院中可真熱鬧辐怕,春花似錦、人聲如沸从绘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僵井。三九已至陕截,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間批什,已是汗流浹背农曲。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驻债,地道東北人乳规。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像合呐,于是被迫代替她去往敵國和親暮的。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

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