1. 程式人生 > >Android-->Fragment生命週期詳解(下)

Android-->Fragment生命週期詳解(下)

Fragment的隱藏和銷燬和其的建立和顯示一樣,也有類似於Activity的生命週期。下圖是Fragment隱藏和銷燬的生命週期。


   在Fragment隱藏和銷燬開始之初,Fragment的生命週期和Activity類似。當用戶跳轉到其他的Activity之時,每個Fragment的onPause、onSaveInstanceState和onStop方法將被呼叫。對於這些方法而言,Fragment的回撥方法會在Activity的之前呼叫。


當Fragment的onStop方法被呼叫後,那麼之後的過程就和Activity有點不同了。接著Activity的onStop方法被呼叫,然後Fragment的onDestoryView方法被呼叫後說明通過onCreateView方法返回的View被銷燬了。Fragment的onDetach方法在其onDestory方法被呼叫之後呼叫。在onDetach方法呼叫之後,說明Fragment已經獲取不到Activity的例項,通過呼叫getActivity返回的例項為空。
    如果Activity包含多個Fragment,Android會迴圈呼叫以下三個方法,onDestoryView、onDestoty和onDetach方法。這個步驟和上文中提到多個Fragment的attach和create過程是很相似的。一旦所有fragment完成該迴圈操作,Android會呼叫Activity的onDestory方法。    大多數情況下,Fragment生命週期的管理和Activity的類似。但有一個非常重要的不同處:就是在Fragment建立和銷燬這兩個過程。Fragment將建立和銷燬View hierarchy(onCreateView返回的View)過程分開,是因為當Fragment沒有view hierarchy時,Fragment也應能夠存在並訪問Activity。     很多情況下,一個Activity會包含多個Fragment,但是某一時刻只會有部分fragment是可見的。在這種情況下,所有被包含的fragment的onAttach和onCreate方法被呼叫。但是其onCreateView方法會直到fragment可見時才被呼叫。同樣地,只有當fragment的onDestoryView方法被呼叫後,fragment才會處於不可見狀態。     以上提到的Fragment不同於Activity之初在Activity需要動態的管理fragment的時候就有用武之地了。我們可以通過FragmentTransaction類來管理Fragment的隱藏與可見。     Fragment有一個非常重要的回撥方法,onSaveInstanceState。和Activity一樣,該方法可以在Fragment銷燬之前用於儲存任何狀態。比如跳轉到其他Activity或者旋轉螢幕時,當前activity和其包含的fragment將會銷燬和重建。通過onSaveInstanceState來儲存一些Fragment的狀態,不久後當返回該fragment時,我們可以通過onCreate和onCreateView方法來恢復fragment狀態。     最後,當處理一些複雜的初始化操作時,譬如連線資料來源、複雜的計算或者資源分配,我們應該在onCreate中進行操作而不是onCreateView。因為,當Fragment的view hierarchy被銷燬(即fragment的onDestoryView被呼叫)但該fragment還沒銷燬,那麼我們就能避免在onCreateView中重新初始化那些複雜操作。