天天看點

【Android開發】之Fragment生命周期

上一篇部落格我們講到了,Fragment的基本使用,相信大家都已經了解怎麼去使用了。如果還有不懂得同學可以去看一下,​​傳送門​​。現在我們來講解一下Fragment的生命周期。

    再講Fragment的生命周期之前,一定要講一下FragmentTransaction也就是fragment的事務,這對我們了解生命周期有很重要的作用。

    那麼什麼是事務?根據使用者的互動情況,對fragment進行添加(add)、移除(remove)、替換(replace),以及執行其他動作,送出給activity的每一套變化,被稱為一個事務。事務當中存在一個堆棧的資料結構,它允許使用者經由fragment的變化往回導航(就是和activity回跳類似,這和activity之間跳轉實作都是一樣的,均用堆棧實作)。使用者可以通過添加FragmentTransaction.addToBackStack(null)函數(一定要在FragmentTrasaction.commit()之前調用),将此Fragment添加到背景堆棧。了解了事務之後我們再來看一下Fragment的生命周期。

    上篇有提到我們将Fragment看成是“小Activity”,相信熟知activity的同學都知道,掌握Activity的生命周期在安卓開發中是很有必要的。下面就為大家帶來Fragment的生命周期圖,并且通過幾個小例子來深度了解Fragment生命周期。

      

【Android開發】之Fragment生命周期

    一、我們先建立一個Fragment1(沒有将它加入到背景堆棧中,即沒有調用FragmentTransaction.addToBackStack(null)函數)并将它顯示,檢視Logcat:

    

【Android開發】之Fragment生命周期

    我們發現,當Fragment1被建立的時候,調用的順序為:

     Fragment1:onAttach--》--》Activity的onAttachFragment--》onCreate--》onCreateView--》onActivityCreated--》onStart--》onResume

現在我們用Fragment2(也沒有添加到背景堆棧),采用replace的方法将Fragment1替換掉,會出現什麼樣的情況:

【Android開發】之Fragment生命周期

    觀察Logcat,我們發現這個時候它的執行順序是:

     Fragment1:onPause--》onStop--》onDestroyView--》onDestroy--》onDetach

     Fragment2:onAttach--》Activity的onAttachFragment--》onCreate--》onCreateView--》onActivityCreated--》onStart--》onResume

   二、如果我們在建立Fragment1的時候,将它加入到背景堆棧中(即調用FragmentTransaction.addToBackStack(null)函數),那麼結果會是怎麼樣子的呢?當然Fragment1的執行順序還是和原來一樣。

我們重點來看一下,用Fragment2(采用添加到背景堆棧),采用replace的方法将Fragment1替換掉,會出現什麼樣的情況:  

【Android開發】之Fragment生命周期

這時候我們看到,它的執行順序是:

    Fragment1:onPause--》onStop--》onDestroyView。這裡并沒有執行onDestroy--》onDetach,這是因為我們将Fragment1添加到背景堆棧中了,是以并沒有摧毀掉Fragment1

    Fragment2:onAttach--》Activity的onAttachFragment--》onCreate--》onCreateView--》onActivityCreated--》onStart--》onResume

  現在我們按下傳回鍵,此時Fragment1将再次顯示出來:

【Android開發】之Fragment生命周期

    這時候我們看到,它的執行順序是:

      Fragment1:onCreateView--》onActivityCreated--》onStart--》onResume

      Fragment2:onPause--》onStop--》onDestroyView--》onDestroy--》onDetach

  三、這時候有同學會問了,如果我們啟動Fragment2的時候,沒有将他加入到背景堆棧中呢?按下傳回鍵後,他的調用又是怎麼樣的呢?那麼讓我們來看一下:

【Android開發】之Fragment生命周期

    我們可以看到執行順序為:

    Fragment1:onDestroy--》onDetach

    為什麼會這樣呢?是不是很奇怪?為什麼不調用Fragment1顯示呢而是将它摧毀了?因為按下傳回鍵之後,我們的Fragment2是通過replace的方式添加的,是以它就先執行remove然後在add Fragment到主界面當中。是以不存在Fragment1了,就調用了onDestroy--》onDetach

再次按下傳回鍵:

【Android開發】之Fragment生命周期

    Fragment2:Activity的onPause--》onPause--》Activity的onStop--》onStop--》Activity的onDestory--》onDestroyView--》onDestory--》onDetach

   

     這是生命周期測試的源碼,如果對上面所講述的還是不清楚,那麼可以下載下傳源碼,自己運作一下。​​點我下載下傳。​​

上一篇: android home鍵2

繼續閱讀