1. 程式人生 > >安卓活動(Activity)和碎片(Fragment)的生命週期

安卓活動(Activity)和碎片(Fragment)的生命週期

引言

對於安卓中生命週期的過程以及相應的事件的瞭解是非常重要的。

活動(Activity)的生命週期

這裡寫圖片描述

Activity 類中定義了七個事件回撥方法,與Activity生命週期的每一個環節對應。

1. onCreate()
這個方法你已經看到過很多次了,每個活動中我們都重寫了這個方法,它會在活動第一次被建立的時候呼叫。你應該在這個方法中完成活動的初始化操作,比如說載入佈局、繫結事件等。

2. onStart()
這個方法在活動由不可見變為可見的時候呼叫。

3. onResume()
這個方法在活動準備好和使用者進行互動的時候呼叫。此時的活動一定位於返回棧的棧頂,並且處於執行狀態。

4. onPause()
這個方法在系統準備去啟動或者恢復另一個活動的時候呼叫。我們通常會在這個方法中將一些消耗CPU 的資源釋放掉,以及儲存一些關鍵資料,但這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。

5. onStop()
這個方法在活動完全不可見的時候呼叫。它和onPause()方法的主要區別在於,如果啟動的新活動是一個對話方塊式的活動,那麼onPause()方法會得到執行,而onStop()方法並不會執行。

6. onDestroy()
這個方法在活動被銷燬之前呼叫,之後活動的狀態將變為銷燬狀態。

7. onRestart()
這個方法在活動由停止狀態變為執行狀態之前呼叫,也就是活動被重新啟動了。

完整生存期:活動在onCreate()方法和onDestroy()方法之間所經歷的,就是完整生存期。一般情況下,一個活動會在onCreate()方法中完成各種初始化操作,而在onDestroy()方法中完
成釋放記憶體的操作。

可見生存期:活動在onStart()方法和onStop()方法之間所經歷的,就是可見生存期。在可見生存期內,活動對於使用者總是可見的,即便有可能無法和使用者進行互動。我們可以通過這兩個方法,合理地管理那些對使用者可見的資源。比如在onStart()方法中對資源進行載入,而在onStop()方法中對資源進行釋放,從而保證處於停止狀態的活動不會佔用過多記憶體。

前臺生存期:

活動在onResume()方法和onPause()方法之間所經歷的,就是前臺生存期。在前臺生存期內,活動總是處於執行狀態的,此時的活動是可以和使用者進行相互的,我們平時看到和接觸最多的也這個狀態下的活動。

碎片(Fragment)的生命週期

這裡寫圖片描述

1. 執行狀態
當一個碎片是可見的,並且它所關聯的活動正處於執行狀態時,該碎片也處於執行狀態。

2. 暫停狀態
當一個活動進入暫停狀態時(由於另一個未佔滿螢幕的活動被新增到了棧頂),與它相關聯的可見碎片就會進入到暫停狀態。

3. 停止狀態
當一個活動進入停止狀態時,與它相關聯的碎片就會進入到停止狀態。或者通過呼叫FragmentTransaction 的remove()、replace()方法將碎片從活動中移除,但有在事務提交之前呼叫addToBackStack()方法,這時的碎片也會進入到停止狀態。總的來說,進入停止狀態的碎片對使用者來說是完全不可見的,有可能會被系統回收。

4. 銷燬狀態
碎片總是依附於活動而存在的,因此當活動被銷燬時,與它相關聯的碎片就會進入到銷燬狀態。或者通過呼叫FragmentTransaction 的remove()、replace()方法將碎片從活動中移除,但在事務提交之前並沒有呼叫addToBackStack()方法,這時的碎片也會進入到銷燬狀態。

常用回撥事件方法

onAttach()
當碎片和活動建立關聯的時候呼叫。

onCreateView()
為碎片建立檢視(載入佈局)時呼叫。

onActivityCreated()
確保與碎片相關聯的活動一定已經建立完畢的時候呼叫。

onDestroyView()
當與碎片關聯的檢視被移除的時候呼叫。

onDetach()
當碎片和活動解除關聯的時候呼叫。

部分內容參考自《第一行程式碼——Android》


這裡寫圖片描述