這是官網的Activity生命週期結構圖,從這個圖中能夠看出Activity的生命週期函數挺多的,其實他的生命週期和以往咱們看到的其餘組件的生命週期同樣,都是從建立到銷燬的過程,只不過之間多加了幾個生命週期函數,將他的生命週期細化了。android
首先看到的事onCreate()函數,顧名思義這個函數在Activity開始建立時調用,能夠在其中定義一些初始化操做。接下來是onStart()方法,這個方法在Activity開始被執行時調用,它緊隨onCreate()方法以後調用,接着是onResume()方法,這個方法對咱們來講算是比較陌生的,這個方法是在該Activity或得用戶輸入焦點時被調用,這個或得用戶輸入焦點有點很差理解,若是咱們用過Android手機或者其餘系統的手機時,常常會看到有些窗口雖然能看到但沒法對他進行操做,這時的Activity就沒有或得用戶焦點。當這個方法調用後Activity開始真正的運行了,在Activity正在運行時用戶激活了另外一個Activity,這時將調用第一個Activity的onPause()方法,能夠理解爲第一個Activity被暫停了,這個時候若是系統的內存不夠用(手機內存不夠用的狀況常常發生),第一個Activity的進程可能被殺死(什麼時候被殺死是由系統決定的,不須要咱們參入),當下次咱們再運行第一個Activity時就須要從新建立這個Activity,那就又須要調用onCreate()方法。若是在這個Activity沒有被殺死的狀況下,咱們從新調用第一個Activity,就會直接調用它的onResume()方法後開始運行。若是第一個Activity好久都沒有獲得再次運行機會,就會調用onStop()被中止,這時若是Activity又或得用戶輸入焦點,就會調用onRestart()方法,從新開始執行這個Activity,或者被系統殺死,不然調用onDestroy()方法銷燬Activity。這整個過程看起來有點繞,其實在實際開發中咱們不多會用到全部的生命週期函數,但咱們要弄清它的原理,在使用時知道因此然就好了。函數
------------------------------------------------------------------------------------------------------------------------------------------spa
一些Activity可能比另一些要重要,好比一個打進來的電話比正在玩的遊戲重要;另外,android做爲手機系統,內存小於臺式機或者筆記本。線程
有時,當前的Activity可能會發現被關閉,是由於其餘Activity須要運行,系統須要當前Activity釋放內存資源。能夠將這些看作是生命週期,當前的Activity消亡了,其餘的則活了。對象
Activity的狀態生命週期
與activity狀態相關的方法遊戲
android系統經過調用一些約定的activity方法,來轉換activity的狀態。進程
onCreate()方法和onDestroy()方法事件
onCreate()方法被調用的狀況:內存
onDestroy被調用的狀況,即當activity關閉的狀況:
須要注意的是,若是內存十分緊急,可能不會調用onDestroy方法,而是系統不顧一切的關閉掉,好比來電話的時候。onDestroy()一般用於釋放在onCreate()方法中得到的資源。
onStart()、onRestart()和onStop()方法
activity在前臺執行,可能由於是第一次啓動,或者從隱藏狀態從新帶回前臺(好比其餘的activity或者來電話)。以上狀況都會執行onStart()。
onRestart()方法會在activity已經中止,從新開始的時候調用。
onStop()方法在activity要中止的時候調用。
onPause()和onResume()方法
onResume()方法在activity要前臺運行的時候執行,好比第一次初始啓動後,或者從中止(stop)狀態從新開始,或者當一個彈出對話框被清除(好比來電話)。這是刷新UI的最佳位置,能夠在此方法中刷新視圖,或者調用後臺線程更新UI。
相應的,當其餘activity奪取了當前activity的控制權後,須要調用當前activity的onPause()方法。在此方法中,應該取消任何在onResume()方法中作的事情。好比關閉後臺線程,釋聽任何獨佔方位的資源(好比攝像頭)。
一旦onPause()方法被調用,android系統將保留對此activity所在進程在任什麼時候刻kill的權利。所以在此狀態下不會可靠的收到未來的事件消息。
對狀態的合理處理
通常狀況下,上述方法會處理應用程序通用的事情。好比經過onCreate()方法關聯出最後的UI,經過onPause()方法關閉後臺線程。
但有時須要爲activity保存狀態。好比有個計算器程序activity,計算結果後,可能又作了其餘事情,用戶回頭想查剛纔計算的結果。由於計算器有可能由於內存稀缺而關閉。
這時須要使用onSaveInstanceState()方法,android會經過該方法保存狀態,能夠覆蓋該方法保存本身的狀態值到Bundle。
而後經過onCreate()或者onRestoreInstanceState()方法獲得Bundle對象實例恢復這些自定義狀態。