【Android開發】之Fragment生命週期

來源:互聯網
上載者:User

標籤:des   android   style   blog   http   color   使用   io   ar   

 

  上一篇部落格我們講到了,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顯示呢而是將它摧毀了?因為按下返回鍵之後,系統會移除一個後台堆棧中的Fragment並將它摧毀,所以這裡調用了onDestroy--》onDetach方法,將Fragment1摧毀了,而不是將它顯示出來!!!

 

  • 再次按下返回鍵:

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

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

   

  三、源碼下載

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

 

 

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

【Android開發】之Fragment生命週期

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.