在客戶端源碼中,咱們能夠看到大量的Fragment,關於Fragment的相關學習,給你們推薦一篇值得學習的博客:服務器
http://blog.csdn.net/lmj623565791/article/details/37970961 學習
本文 主要介紹 Fragment 和Acitivity生命週期的關係,掌握生命週期後,咱們能夠靈活的在各個週期進行相應的業務處理。demo中一個Activity activity 兩個 Fragment first second ,經過add 方法添加Fragment,切換時經過hidden 和show方法隱藏和顯示。默認首先加載first 。咱們複寫了Acticity 和 Fragment中的 生命週期,在裏面進行簡單的打印操做。因爲demo簡單,再也不粘貼上來。測試
測試彙總狀況以下:spa
一、activity 顯示時,只建立了 first的實例,並無經過事務將first添加到activity中去的話,咱們會發現並不會觸發first的生命週期;由於你沒有將Fragment添加到界面中的話,意味着並無將界面和Fragment創建關聯。.net
二、activity 顯示,建立 first的實例,經過事務將first添加add到activity中去的話,當前能夠看到first。生命週期:blog
activity :onCreate ,first :onAttach onCreate onViewCreate ;生命週期
activity :onStart ,first :onStart ;事務
activity :onResume,first :onResume;ci
三、從first 切換到 secon,second首次加載,聲明週期變化:get
first :onHiddenChanged 結果true first隱藏了。 second: onAttach onCreate onViewCreate onStart onResume;
四、如今在second 按下hom鍵的週期變化:
由於first的加載先於second ,咱們很輕易地發現
first second activity 依次onPause ; first second acticity 一次onStop;
五、在4的基礎上,從新喚醒應用的週期變化,界面中有onRestart,而Fragment沒有的。所以:
activity onRestart ;
activity first second 依次onStart ,activity first second 一次onResume;
六、當前就在first 再一次的顯示first
first onHiddenChanged 中其返回值 先true 再false. 意思先把你隱藏 而後再把你顯示(不隱藏)
七、按返回鍵,關閉界面
first second activity 依次 onPause ;
first second activitu 依次 onStop;
first onDestoyView onDestory onDetach ;
second onDestoyView onDestory onDetach ;
activity onDestory.
總結:
一、Fragment 是界面的一部分,界面能夠有一個或者多個Fragment組成;
二、因爲Fragment是依附在界面中的,所以,Fragment的生命週期的開始onAttach 晚於 界面的生命週期的開始onCreate;
三、因爲Fragment是依附在界面中的,所以,Fragment的生命週期的結束起始onPause 早於 界面的生命週期的結束起始onPause;
四、界面中若是有 多個Fragment ,最早加載的Fragment的生命週期不管開始仍是結束都先於後來加載的Fragment.
五、Fragment 第一次加載onHiddenChanged不會回調,切換其餘Fragment再切回來到當前的Fragment的時候, 能夠根據是否被隱藏的結果 ,來作一些業務處理,好比說「每次看見fragment的時候都向服務器請求數據「。
但願簡單的總結,能幫助到你我。贊頂一下嘛,謝謝!!