ViewPager 中Fragment 與一般Fragment生命周期的區(qū)別

背景介紹:

? 今天面試,面試官問了很多Java、android方面細節(jié)的事情,比如說String、StringBuffer、StringBuilder、CharSequenece之間的區(qū)別,lanuchMode的四種模式應(yīng)用場景、多線程的內(nèi)部處理機制。而令我最印象深刻的是ViewPager 中Fragment 與一般Fragment生命周期的區(qū)別 ?

? 雖然在項目中反復(fù)使用了viewPager、Fagment,但因為viewPager良好的封裝性,使得在簡單使用的時候不用了解更深層次的內(nèi)部結(jié)構(gòu)。但是,因為fagment真的太常用了,所以我們今天來聊一聊fragment復(fù)雜的生命周期。


一般Fragment生命周期


?fragment依賴于activity,所以他們生命周期是對應(yīng),順便說一下Application的生命周期是包含activity,activity生命周期包含fragment,現(xiàn)在我們看看下面官方給出的Fragment LifeCycle:




?生命周期:

1.onAttach(Activity): ?fragment 第一步是與activity綁定,當你想在這個階段做點什么,就可以在fagment中復(fù)寫這個方法;

2.onCreate(Bundle) : fragment 的 onCreate()方法;

3.onCreateView(LayoutInflater, ViewGroup, Bundle): ?這個方法用得比較多,一般用來inflate布局,還可以通過Bundle恢復(fù)數(shù)據(jù);

4.onActivityCreate(Bundle): ?當activity調(diào)用onCreate()并完成后,通知fragment調(diào)用這個方法;

5.onViewStateRestore(Bundle): ?保存下來的視圖層次結(jié)構(gòu)恢復(fù)成功后調(diào)用這方法;

6. onStart(): ? 對應(yīng)于activity的onStart()方法;

7.onResume(): ?對應(yīng)于activity 的onResume()方法,fragment開始可見,fragment只有處于這個階段才可以被替換或增加fagment,也就是說fragmentManager對fragment的管理只能在這個階段進行;

8.onPause(): ?fragment處于這個狀態(tài)有兩個原因;一是對應(yīng)的activity處于這個狀態(tài),二是正在對fragment進行某種操作(比如刪除fragment、替換fragment);

9.onStop(): ?與onPause()相似,同樣的兩個原因;

10. onDestroyView(): ?僅僅是清除視圖;

11. onDestroy(): ?調(diào)用此方法清除fragment的狀態(tài);

12. onDetach(): ? ?解除綁定;

以上就是一般的fragment(不與viewpager綁定;在layout中作為自定義控件,或者是在代碼中引用)的生命周期,它與activity有很密切的對應(yīng)關(guān)系,可以總結(jié)為如下邏輯圖:




ViewPager中fragment生命周期介紹:

?因為在ViewPager中fragment的管理是由adapter負責的。

對于FragmentPagerAdapter,當前視圖的上一頁僅視圖被銷毀了,所以它的onCreateView()會被調(diào)用到。

對于FragmentStatePagerAdapter,當前視圖的上一頁實例被銷毀了,所以getItem()會被再次調(diào)用,整個Fragment對應(yīng)的生命周期函數(shù)會再走一遍。

運行一個實例來說明:

下面是相關(guān)的生命周期函數(shù)調(diào)用情況:

當剛啟動一個Activity時,Activity和Fragment都將被創(chuàng)建:


當Activity進入后臺后:


當Activity返回前臺后:



當Activity被銷毀后:


最后總結(jié):viewpager 中 使用 FragmentPagerAdapter 管理fragment時 和fragment 壓到返回棧時都是調(diào)用onDestroyView() ———> onCreateView()來重新生成,而其他情況下都需要重新跑一遍生命周期。

注:Fragment的返回棧由Activity管理;而Activity的返回棧由系統(tǒng)管理

最后放一張概括周全的總結(jié)圖:

參考: ?01 https://segmentfault.com/q/1010000003719990

? ? ? ? ? ? 02?Android Fragment的生命周期和返回棧?

? ? ? ? ? ? 03?A Visualization of the Android Activity & Fragment Lifecycle

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容