Activity生命周期的七個狀態事件分別為onCreate(BundlesavedInstenceState)、onstart()、onRestart()、onResume()、onPause()、onStop()、onDestory()
下面是activity的生命周期圖:
在activity對象加載時開始調用它的onCreate(Bundle savedInstenceState)方法
運行時調用它的onStart()方法和onResume()方法
·當這個activity可見但失去焦點時,就調用它的onPause()方法;當這個activity對象再次獲得焦點時,用戶可對其進行相應的操作,這時候就調用它的onResume()方法;
·當這個activity對象處於不可見的情況,並且與其他的activity進行切換時,這時就由onResume()方法開始執行,往下到onPause()方法,再到onStop(),處於停止狀態,用戶不能對其進行任何操作。 ·當屏幕的方向發生改變時,Activity會被摧毀並且被重新創建
注意:但是如果是兩個來回切換的頁面activity時,下一個activity中有返回鍵,點擊返回鍵就切換回當前的activity。這時就要注意了,如果是點擊第二個activity頁面上的返回鍵,會從onCreate(Bundle savedInstenceState)方法開始調用,第一個activity會重新創建一次,也就是說返回過來的activity頁面已經不是切換過去的那個activity了。但是如果點擊鍵盤上的返回鍵,就會調用onRestart()方法,意思就是這時切換回的界面還是剛才切換過去的第一個activity
·假如在這個activity對象裡有一個對話框的操作,當點擊指定按鈕時就會在這個activity中彈出一個對話框,此時的對話框是依附在這個activity之上的,實際上還是顯示的一個activity對象。又因為生命周期事件只有在activity和activity之間的轉換才會觸發,因此,此時無生命周期事件的觸發也無方法的調用
onSaveInstanceState() 和 onRestoreInstanceState()方法的調用:
它們不是生命周期方法,不一定會被觸發。當應用遇到意外情況(如:內存不足、用戶直接按Home鍵)由系統銷毀一個Activity時,onSaveInstanceState() 會被調用,從而保存用戶數據。但是當用戶主動去銷毀一個Activity時,例如在應用中按返回鍵,onSaveInstanceState()就不會被調用。因為在這種情況下,用戶的行為決定了不需要保存Activity的狀態。通常onSaveInstanceState()只適合用於保存一些臨時性的狀態,而onPause()適合用於數據的持久化保存。
如果你想在Activity被摧毀前緩存一些數據,並且在Activity被重新創建後恢復緩存的數據。可以重寫Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法
這時應注意的是:onRestoreInstanceState()方法調用的前提是activity必須被系統真正銷毀,即onDestory()方法必須被執行。反之,如果系統沒有將該activity銷毀,該activity只是處於暫停或停止狀態,即該activity不是被正常關閉銷毀,如果是因為內存不足或其他原因導致可能被系統銷毀;onRestoreInstenceState方法就不會被調用執行。例如,當正在顯示activity A的時候,用戶按下HOME鍵回到主界面,然後用戶緊接著又返回到activity A,這種情況下activity A一般不會因為內存的原因被系統銷毀,故activity A的onRestoreInstanceState方法不會被執行。