歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android開發教程:Activity生命周期的理解

Android開發教程:Activity生命周期的理解

日期:2017/3/1 10:48:46   编辑:Linux編程
每個Activity對象都有三個狀態和七個生命周期觸發事件,這三種狀態分別為運行、暫停和停止。運行狀態就是說這個activity對象對於用戶是可見的,焦點就在這個activity對象上;暫停狀態就是當前的activity對象對於用戶也是可見的,但是焦點不在這個activity對象上,用戶不能對這個activity對象進行任何操作,打個比方來說就是用戶可以看到兩個activity對象,但是進行操作的是第二個activity對象,那麼這時第二個activity對象處在運行狀態,而第一個就處在暫停狀態;停止狀態就是這個activity對象對於用戶是完全不可見的,用戶當然也不能對它進行任何操作了,處在停止狀態時,仍然保留著當前的狀態和信息。當用戶長時間不對處於暫停狀態的activity進行操作時,這個activity對象也可能會由暫停狀態變為停止狀態,變為停止狀態後,其實這個activity對象就已經比較危險了,因為當運行其他應用程序時,如果系統內存不足就會首先將處於停止狀態的activity對象銷毀釋放資源空間,執行當前的應用程序,如果內存仍然不足就會將處於暫停狀態的activity對象銷毀,釋放資源空間,運行當前程序

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方法不會被執行。

Copyright © Linux教程網 All Rights Reserved