【Android開發】之Fragment生命周期


 

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

 

  一、Fragment的事務

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

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

 

 

  二、Fragment生命周期

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

      

 

 

    一、我們先創建一個Fragment1(沒有將它加入到后台堆棧中,即沒有調用FragmentTransaction.addToBackStack(null)函數)並將它顯示,查看Logcat:

    

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

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

 

  • 現在我們用Fragment2(也沒有添加到后台堆棧),采用replace的方法將Fragment1替換掉,會出現什么樣的情況:

    

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

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

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

 

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

  • 我們重點來看一下,用Fragment2(采用添加到后台堆棧),采用replace的方法將Fragment1替換掉,會出現什么樣的情況:  

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

    Fragment1:onPause--》onStop--》onDestroyView。這里並沒有執行onDestroy--》onDetach,這是因為我們將Fragment1添加到后台堆棧中了,所以並沒有摧毀掉Fragment1

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

    

  •   現在我們按下返回鍵,此時Fragment1將再次顯示出來:

    

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

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

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

 

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

    

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

    Fragment1:onDestroy--》onDetach

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

 

  • 再次按下返回鍵

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

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

   

  三、源碼下載

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

 

 

  下一節我還會針對Fragment的詳細使用進行解析,歡迎訂閱。我的CSDN博客:http://blog.csdn.net/u010049692/article/details/38926561


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM