天天看點

Android Fragment 生命周期

Fragment表現Activity中使用者界面的一個行為或者是一部分。你可以在一個單獨的activity上把多個fragment組合成為一個多區域的UI,并且可以在多個activity中再使用。你可以認為fragment是activity的一個子產品零件,它有自己的生命周期,接收它自己的輸入事件,并且可以在activity運作時添加或者删除。

> 生命周期圖

建立Fragment

Android Fragment 生命周期

Fragment與Activity生命周期對比圖:

Android Fragment 生命周期

生命周期分析:

  1. 當一個fragment被建立的時候,它會經曆以下狀态.

onAttach()

onCreate()

onCreateView()

onActivityCreated()

2.當這個fragment對使用者可見的時候,它會經曆以下狀态。

onStart()

onResume()

3.當這個fragment進入“背景模式”的時候,它會經曆以下狀态。

onPause()

onStop()

4.當這個fragment被銷毀了(或者持有它的activity被銷毀了),它會經曆以下狀态。

onPause() 
  onStop()
   onDestroyView() 
   onDestroy() // 差點漏掉類這個回調
   onDetach()
           

5.就像activitie一樣,在以下的狀态中,可以使用Bundle對象儲存一個fragment的對象。

onCreate()

onCreateView()

onActivityCreated()

6.fragments的大部分狀态都和activitie很相似,但fragment有一些新的狀态。

onAttached() —— 當fragment被加入到activity時調用(在這個方法中可 以獲得所 在的activity)。

onCreateView() ——

當activity要得到fragment的layout時,調用此方法,fragment在其中建立自己的layout(界面)。

onActivityCreated() —— 當activity的onCreated()方法傳回後調用此方法

onDestroyView() —— 當fragment中的視圖被移除的時候,調用這個方法。 onDetach() ——

當fragment和activity分離的時候,調用這個方法。

一旦activity進入resumed狀态(也就是running狀态),你就可以自由地添加和删除fragment了。是以,隻有當activity在resumed狀态時,fragment的生命周期才能獨立的運轉,其它時候是依賴于activity的生命周期變化的。

Fragment必須總是被嵌入到一個activity之中,并且fragment的生命周期直接受其宿主activity的生命周期的影響。例如,一旦activity被暫停,它裡面所有的fragment也被暫停,一旦activity被銷毀,它裡面所有的fragment也被銷毀。然而,當activity正在運作時(處于resumed的生命周期狀态),你可以單獨的操控每個fragment,比如添加或者删除。當你執行這樣一項事務時,可以将它添加到背景的一個棧中,這個棧由activity管理着——activity裡面的每個背景棧内容實體是fragment發生過的一條事務記錄。這個背景棧允許使用者通過按BACK鍵回退一項fragment事務(往後導航)。

當你添加一個fragment作為某個activity布局的一部分時,它就存在于這個activity視圖體系内部的ViewGroup之中,并且定義了它自己的視圖布局。你可以通過在activity布局檔案中聲明fragment,用元素把fragment插入到activity的布局中,或者是用應用程式源碼将它添加到一個存在的ViewGroup中。然而,fragment并不是一個定要作為activity布局的一部分;fragment也可以為activity隐身工作。

這份文檔描述了如何使用fragment來建立你的應用程式,包括fragment在添加到背景棧時如何維護他們的狀态,如何同activity和其他同屬于該activity的fragment們共享事件,建構到activity的動作槽(action bar)中去,等等。

繼續閱讀