深入理解Activity的生命周期

之前學習安卓的時候只是知道生命周期是什么,有哪幾個,但具體的詳細的東西卻不知道,后來看過《Android開發藝術探索》和大量博客之后,才覺得自己真正有點理解生命周期,本文是我對生命周期的認識的總結。

廢話少說先上圖。

圖片來自于網絡

相信學習安卓的人對這幅圖都很熟悉,這是安卓Activity的生命周期活動圖,詳細而直觀得表現了Activity各生命周期間的關系。下面我來通過問答的方式來談談我對它們的認識。

1.生命周期中各個方法的含義和作用

(1)onCreate:create表示創建,這是Activity生命周期的第一個方法,也是我們在android開發中接觸的最多的生命周期方法。它本身的作用是進行Activity的一些初始化工作,比如使用setContentView加載布局,對一些控件和變量進行初始化等。但也有很多人將很多與初始化無關的代碼放在這,其實這是不規范的。此時Activity還在后臺,不可見。所以動畫不應該在這里初始化,因為看不到……

(2)onStart:start表示啟動,這是Activity生命周期的第二個方法。此時Activity已經可見了,但是還沒出現在前臺,我們還看不到,無法與Activity交互。其實將Activity的初始化工作放在這也沒有什么問題,放在onCreate中是由于官方推薦的以及我們開發的習慣。

(3)onResume:resume表示繼續、重新開始,這名字和它的職責也相同。此時Activity經過前兩個階段的初始化已經蓄勢待發。Activity在這個階段已經出現在前臺并且可見了。這個階段可以打開獨占設備

(4)onPause:pause表示暫停,當Activity要跳到另一個Activity或應用正常退出時都會執行這個方法。此時Activity在前臺并可見,我們可以進行一些輕量級的存儲數據和去初始化的工作,不能太耗時,因為在跳轉Activity時只有當一個Activity執行完了onPause方法后另一個Activity才會啟動,而且android中指定如果onPause在500ms即0.5秒內沒有執行完畢的話就會強制關閉Activity。從生命周期圖中發現可以在這快速重啟,但這種情況其實很罕見,比如用戶切到下一個Activity的途中按back鍵快速得切回來。

(5)onStop:stop表示停止,此時Activity已經不可見了,但是Activity對象還在內存中,沒有被銷毀。這個階段的主要工作也是做一些資源的回收工作。

(6)onDestroy:destroy表示毀滅,這個階段Activity被銷毀,不可見,我們可以將還沒釋放的資源釋放,以及進行一些回收工作。

(7)onRestart:restart表示重新開始,Activity在這時可見,當用戶按Home鍵切換到桌面后又切回來或者從后一個Activity切回前一個Activity就會觸發這個方法。這里一般不做什么操作。

圖片來自網絡

通過上面的了解我們發現其實Activity中的方法大都是兩兩對應的,只有onRestart方法散發著單身狗的清香。
那么相鄰的方法之間有什么區別呢?

2.onCreate和onStart之間有什么區別?

(1)可見與不可見的區別。前者不可見,后者可見。
(2)執行次數的區別。onCreate方法只在Activity創建時執行一次,而onStart方法在Activity的切換以及按Home鍵返回桌面再切回應用的過程中被多次調用。因此Bundle數據的恢復在onStart中進行比onCreate中執行更合適。
(3)onCreate能做的事onStart其實都能做,但是onstart能做的事onCreate卻未必適合做。如前文所說的,setContentView和資源初始化在兩者都能做,然而想動畫的初始化在onStart中做比較好。

3.onStart方法和onResume方法有什么區別?

(1)是否在前臺。onStart方法中Activity可見但不在前臺,不可交互,而在onResume中在前臺。
(2)職責不同,onStart方法中主要還是進行初始化工作,而onResume方法,根據官方的建議,可以做開啟動畫和獨占設備的操作。

4.onPause方法和onStop方法有什么區別?

(1)是否可見。onPause時Activity可見,onStop時Activity不可見,但Activity對象還在內存中。
(2)在系統內存不足的時候可能不會執行onStop方法,因此程序狀態的保存、獨占設備和動畫的關閉、以及一些數據的保存最好在onPause中進行,但要注意不能太耗時。

5.onStop方法和onDestroy方法有什么區別?

onStop階段Activity還沒有被銷毀,對象還在內存中,此時可以通過切換Activity再次回到該Activity,而onDestroy階段Acivity被銷毀

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

(1)一個Activity或多或少會占有系統資源,而在官方的建議中,onPause方法將會釋放掉很多系統資源,為切換Activity提供流暢性的保障,而不需要再等多兩個階段,這樣做切換更快。
(2)按照生命周期圖的表示,如果用戶在切換Activity的過程中再次切回原Activity,是在onPause方法后直接調用onResume方法的,這樣比onPause→onStop→onRestart→onStart→onResume要快得多。

7.與生命周期密切相關的onSaveInstanceState方法和onRestoreInstanceState方法在什么時候執行?

通過閱讀源碼會發現,當targetSdkVersion小于3時onSaveInstanceState是在onPause方法中調用的,而大于3時是在onStop方法中調用的。
而onRestoreInstanceState是在onStart之后、onResume之前調用的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容