標籤:android開發 activity 生命週期
一、周期的各個階段
首先,通過Google官方發布的生命週期圖來理解一下整個流程:
首先在這裡簡要介紹一下周期中各個方法:
onCreate():在活動被建立的時候執行
onStart():在活動開始可見的時候執行
onPause():在活動失去焦點,不可互動的時候執行,但此時此活動仍然可見
onStop():在活動完全被其他活動覆蓋的時候執行,顯然,此時活動不可見了
onDestory():在活動銷毀的時候
onRestart():當被覆蓋的活動沒被回收再次啟動的時候調用。
二、用三個小周期去理解整個生命週期1.完整的生命週期
從onCreate()到onDestroy()之間所經曆的的是完整的生命週期。所以,應該在onCreate()完成各種初始化操作,在onDestroy()完成各種資源回收的操作。
2.可見的生命週期
從onStart()到onStop()之間所經曆的的是可見生命週期,只要是在這之間,activity的內容都是可見的。既然是從onStart()開始可見,到onStop()不可見,那麼我們就可以在onStart()裡邊載入使用者可見的資源,在onStop()裡邊釋放這些資源。這樣的話,比在onDestroy()裡邊釋放資源要節省記憶體。
3.前台生命週期
從onResume()到onPause()之間經曆的是前台生命週期,在這之間的不僅可見,而且是可以互動的。
三、各個方法執行的時機onCreate():
這個不用多說啦,就是在Activity被建立的時候調用。如果一個Activity被回收掉,那麼他再次啟動的時候也會調用這個方法。
onStart()
Activity被建立以後,便開始啟動,執行了onStart()方法以後,這個Activity便可見。如果一個Activity被完全覆蓋但是系統沒有回收它,那麼他再次啟動的時候,便會先執行onRestart()方法,然後再次執行onStart()方法。右上邊的圖片可以看出
onResume()
查了一下單詞“Resume”的意思是恢複的意思。實在搞不明白恢複放在這裡的關係。但是onResume()執行完以後,這個Activity便可以與使用者進行互動了。這個Activity便處於正式的運行狀態,可以與使用者進行互動。
onPause()
當另外一個活動來到前台的時候,此時要將當前啟動並執行Activity覆蓋,會先執行這個方法,然後在執行onStop()。不過,如果到來的是一個對話方塊(沒有完全覆蓋當前Activity)的話,當前的Activity便會執行到onPause(),不會繼續執行inStop(),因為他並不是完全不可見的。此時,在這個狀態下,除非是記憶體極其緊張,否則不會回收這個Activity。
onStop()
如果當前activity被另一個Activity覆蓋了,完全不可見了。那麼onStop()便會被執行。如果記憶體緊張的時候,便會回收掉這個Activity。如果回收的話便會向下執行到onDestroy().
onRestart()
如果被完全覆蓋的activity沒有被回收,那麼他再次執行的時候便會首先執行onRestart()方法。在執行onStart()方法。
onDestroy()
當系統記憶體不足了,那麼他便會首先搜尋被完全覆蓋的Activity,將他們的記憶體釋放掉,釋放的時候便會執行onDestroy()方法。我們可以在onDestroy()中釋放一些自己定義的變數。
四、活動被回收了怎麼辦
對於一般的活動,當被系統回收掉以後,無非就是重新建立這個活動。但是如果一個活動我們要求他再次建立的時候保持原樣,就比如我們在文字框裡輸入了一些內容。那麼此時該怎麼辦呢?
自然是有辦法解決的:
onSaveInstanceState(Bundle bundle){}
這個方法會保證在活動被回收前被調用,因此我們就可以在這個方法之中做一些儲存操作。然後onCreate()接受的參數就是這個方法儲存的那個Bundle。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
五、總結
郭霖大神在他的《第一行代碼》關於活動的聲明周期的講解算是比較透徹,令我受益匪淺。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
活動(activity)的生命週期