典型情況下的生命周期
我們按照下圖的整個流程來介紹下典型情況下的Activity生命周期。
Android_Activity_LifeCyle.png
-
onCreate()
方法:表示活動正在創建,進行一些初始化工作。 -
onStart()
方法表示Activity正在啟動,已經存在了,但是尚未顯示出來 -
onResume()
方法表示Activity已經可見了,顯示在前臺了,用戶已經可以與界面進行交互了
注意:在Activiy創建時,這三個方法在用戶看來,是非常迅速的幾乎同時完成的,一氣呵成,所以沒有明顯的中間狀態
-
onPause()
方法表示該Activity已經不在前臺了,可能被半透明的活動遮擋這一份,從而繼續保持這個狀態;也有可能已經徹底不可見了,此時就會繼續執行onStop()
方法。對于,前一種情況而言,如果該Activity在回到前臺,就會調用onResume()
方法。我們應當避免,在onPause()
方法中調用cpu密集型的操作,因為下一個啟動的Activity的onResume()
方法必須在這個onPause()
方法后才能執行。因此,在onPause()
方法中,我們可以
- 停止動畫等消耗cpu的操作
- 提交未保存的修改,當用戶希望離開時保存時
- 釋放資源
-
onStop()
方法執行時,Activity將由可見轉為徹底不可見,此時可以執行一些更加重的釋放資源的操作,比如數據庫操作等等。此時,如果Activity徹底銷毀,就會執行onDestray()
方法;如果Activity重新開始的話,就會執行onRestart()
方法,接著執行onStart()
方法,接著onResume()
方法。 -
onRestart()
方法:表示Activity正在重新啟動,一般情況下,當Activity從不可見重新變為可見狀態時,onRestart()
方法會被調用。 -
onDestroy
方法:表示Activity即將被銷毀,做一些回收工作和資源釋放。
異常情況下的生命周期
異常情況總體可分為兩種:資源相關的系統配置發生改變導致Activity殺死重建(比如翻轉屏幕);內存不足,被殺死。在這兩種異常情況下終止時,系統會調用onSaveInstanceState()
來保存當前Activity狀態,在onStop()
方法前調用,和onPause()
沒有時序關系。
當Activity重新建造后,系統會調用onRestoreInstanceState()
方法,并把Activity銷毀時onSaveInstanceState()
保存的Bundle對象作為參數同時傳遞給onRestoreInstanceState()
方法和onCreate()
方法。因此,我們可以通過這兩個方法來判斷Acitivity是否被重建了。從時序上說,onRestoreInstanceState()
方法的調用時間在onStart()
方法后。
在考慮到這中情況,我們可以在'onSaveInsanceState()'方法中保存我們在Activity異常關閉時需要保存的東西。然后在重啟的onCreate()中取出數據,數據是以Bundle格式存入取出的。