Activity的生命周期

一.Activity的方法的介紹

onCreate : 該方法是在Activity被創(chuàng)建時回調(diào)沟优,它是生命周期第一個調(diào)用的方法燃箭,我們在創(chuàng)建Activity時一般都需要重寫該方法劣像,然后在該方法中做一些初始化的操作含懊,如通過setContentView設(shè)置界面布局的資源豹悬,初始化所需要的組件信息等桐筏。

onStart : 此方法被回調(diào)時表示Activity正在啟動范抓,此時Activity已處于可見狀態(tài)骄恶,只是還沒有在前臺顯示,因此無法與用戶進行交互匕垫∩常可以簡單理解為Activity已顯示而我們無法看見擺了。

onResume : 當此方法回調(diào)時象泵,則說明Activity已在前臺可見寞秃,可與用戶交互了(處于前面所說的Active/Running形態(tài)),onResume方法與onStart的相同點是兩者都表示Activity可見偶惠,只不過onStart回調(diào)時Activity還是后臺無法與用戶交互春寿,而onResume則已顯示在前臺,可與用戶交互洲鸠。當然從流程圖堂淡,我們也可以看出當Activity停止后(onPause方法和onStop方法被調(diào)用),重新回到前臺時也會調(diào)用onResume方法扒腕,因此我們也可以在onResume方法中初始化一些資源绢淀,比如重新初始化在onPause或者onStop方法中釋放的資源。

onPause : 此方法被回調(diào)時則表示Activity正在停止(Paused形態(tài))瘾腰,一般情況下onStop方法會緊接著被回調(diào)皆的。但通過流程圖我們還可以看到一種情況是onPause方法執(zhí)行后直接執(zhí)行了onResume方法,這屬于比較極端的現(xiàn)象了蹋盆,這可能是用戶操作使當前Activity退居后臺后又迅速地再回到到當前的Activity费薄,此時onResume方法就會被回調(diào)。當然栖雾,在onPause方法中我們可以做一些數(shù)據(jù)存儲或者動畫停止或者資源回收的操作楞抡,但是不能太耗時,因為這可能會影響到新的Activity的顯示——onPause方法執(zhí)行完成后析藕,新Activity的onResume方法才會被執(zhí)行召廷。

onStop : 一般在onPause方法執(zhí)行完成直接執(zhí)行,表示Activity即將停止或者完全被覆蓋(Stopped形態(tài)),此時Activity不可見竞慢,僅在后臺運行先紫。同樣地,在onStop方法可以做一些資源釋放的操作(不能太耗時)筹煮。

onRestart :表示Activity正在重新啟動遮精,當Activity由不可見變?yōu)榭梢姞顟B(tài)時,該方法被回調(diào)败潦。這種情況一般是用戶打開了一個新的Activity時本冲,當前的Activity就會被暫停(onPause和onStop被執(zhí)行了),接著又回到當前Activity頁面時变屁,onRestart方法就會被回調(diào)眼俊。

onDestroy :此時Activity正在被銷毀,也是生命周期最后一個執(zhí)行的方法粟关,一般我們可以在此方法中做一些回收工作和最終的資源釋放。

下面我們通過程序來驗證上面流程中的幾種比較重要的情況环戈,同時觀察生命周期方法的回調(diào)時機闷板。

二、方法之間的區(qū)別

1.?onCreate和onStart之間有什么區(qū)別院塞?

(1)可見與不可見的區(qū)別遮晚。前者不可見,后者可見拦止。

(2)執(zhí)行次數(shù)的區(qū)別县遣。onCreate方法只在Activity創(chuàng)建時執(zhí)行一次,而onStart方法在Activity的切換以及按Home鍵返回桌面再切回應(yīng)用的過程中被多次調(diào)用汹族。因此Bundle數(shù)據(jù)的恢復(fù)在onStart中進行比onCreate中執(zhí)行更合適萧求。

(3)onCreate能做的事onStart其實都能做,但是onstart能做的事onCreate卻未必適合做顶瞒。如前文所說的夸政,setContentView和資源初始化在兩者都能做,然而想動畫的初始化在onStart中做比較好榴徐。

2.onStart方法和onResume方法有什么區(qū)別守问?

(1)是否在前臺。onStart方法中Activity可見但不在前臺坑资,不可交互耗帕,而在onResume中在前臺。

(2)職責不同袱贮,onStart方法中主要還是進行初始化工作仿便,而onResume方法,根據(jù)官方的建議,可以做開啟動畫和獨占設(shè)備的操作探越。

3.onPause方法和onStop方法有什么區(qū)別狡赐?

(1)是否可見。onPause時Activity可見钦幔,onStop時Activity不可見枕屉,但Activity對象還在內(nèi)存中。

(2)在系統(tǒng)內(nèi)存不足的時候可能不會執(zhí)行onStop方法鲤氢,因此程序狀態(tài)的保存搀擂、獨占設(shè)備和動畫的關(guān)閉、以及一些數(shù)據(jù)的保存最好在onPause中進行卷玉,但要注意不能太耗時哨颂。

4.onStop方法和onDestroy方法有什么區(qū)別?

onStop階段Activity還沒有被銷毀相种,對象還在內(nèi)存中威恼,此時可以通過切換Activity再次回到該Activity,而onDestroy階段Acivity被銷毀



? 1.為什么切換Activity時各方法的執(zhí)行次序是(A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop而不是(A)onPause→(A)onStop→(B)onCreate→(B)onStart→(B)onResume

(1)一個Activity或多或少會占有系統(tǒng)資源寝并,而在官方的建議中箫措,onPause方法將會釋放掉很多系統(tǒng)資源,為切換Activity提供流暢性的保障衬潦,而不需要再等多兩個階段斤蔓,這樣做切換更快。

(2)按照生命周期圖的表示镀岛,如果用戶在切換Activity的過程中再次切回原Activity弦牡,是在onPause方法后直接調(diào)用onResume方法的,這樣比onPause→onStop→onRestart→onStart→onResume要快得多漂羊。

2.與生命周期密切相關(guān)的onSaveInstanceState方法和onRestoreInstanceState方法在什么時候執(zhí)行驾锰?

通過閱讀源碼會發(fā)現(xiàn),當targetSdkVersion小于3時onSaveInstanceState是在onPause方法中調(diào)用的拨与,而大于3時是在onStop方法中調(diào)用的稻据。

而onRestoreInstanceState是在onStart之后、onResume之前調(diào)用的买喧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捻悯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淤毛,更是在濱河造成了極大的恐慌今缚,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件低淡,死亡現(xiàn)場離奇詭異姓言,居然都是意外死亡瞬项,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門何荚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囱淋,“玉大人,你說我怎么就攤上這事餐塘⊥滓拢” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵戒傻,是天一觀的道長税手。 經(jīng)常有香客問我,道長需纳,這世上最難降的妖魔是什么芦倒? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮不翩,結(jié)果婚禮上兵扬,老公的妹妹穿的比我還像新娘。我一直安慰自己口蝠,他們只是感情好周霉,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亚皂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪国瓮。 梳的紋絲不亂的頭發(fā)上灭必,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音乃摹,去河邊找鬼禁漓。 笑死,一個胖子當著我的面吹牛孵睬,可吹牛的內(nèi)容都是我干的播歼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼掰读,長吁一口氣:“原來是場噩夢啊……” “哼秘狞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹈集,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤烁试,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拢肆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體减响,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡靖诗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了支示。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刊橘。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颂鸿,靈堂內(nèi)的尸體忽然破棺而出促绵,到底是詐尸還是另有隱情,我是刑警寧澤据途,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布绞愚,位于F島的核電站,受9級特大地震影響颖医,放射性物質(zhì)發(fā)生泄漏位衩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一熔萧、第九天 我趴在偏房一處隱蔽的房頂上張望糖驴。 院中可真熱鬧,春花似錦佛致、人聲如沸贮缕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽感昼。三九已至,卻和暖如春罐脊,著一層夾襖步出監(jiān)牢的瞬間定嗓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工萍桌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宵溅,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓上炎,卻偏偏與公主長得像恃逻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子藕施,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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

  • 啟動與銷毀Activity 不同于使用 main() 方法啟動應(yīng)用的其他編程范例寇损,Android 系統(tǒng)會通過調(diào)用對...
    安卓Boy閱讀 1,769評論 3 5
  • 您的應(yīng)用中的Activity應(yīng)該做到如下需求: 1.用戶在使用應(yīng)用時接聽來電或切換到另一個應(yīng)用,它不會崩潰铅碍。 2....
    正陽Android閱讀 526評論 1 0
  • 這是我第三遍看《Android開發(fā)藝術(shù)探索》這本書了润绵,從第一遍看的云里霧里,第二遍略微明白之后胞谈,我決定看第三遍尘盼,并...
    陳添閱讀 860評論 2 8
  • 一本android開發(fā)程序員必讀的一本書憨愉,感謝任玉剛大佬的分享 一、Activity的生命周期全面分析 典型情況下...
    kongjn閱讀 534評論 1 3
  • 序言 原本以為這本書是講產(chǎn)品如何從客戶那里總結(jié)故事的方法和具體事例的卿捎,通過序言發(fā)現(xiàn)和開始的認知完全不同配紫,書中應(yīng)該把...
    tiancijiaren閱讀 773評論 0 0