1. 程式人生 > >Android viewPager Fragment 切換生命週期

Android viewPager Fragment 切換生命週期

記錄一下:

場景:


上面是一個很常見的一個切換效果:結果一般都是一個主Activity,裡面佈局了一個TabLayout+ViewPager,ViewPager裡面添加了4個Fragment,假如日期時間為A,聲音設定為B 開關機設定為C,認證模式 為D

第一步:列印一下主要的Log

主要的有setUserVisibleHint(當前頁是否可見)、onCreatedView、onViewCreated、onActivityCreated、onStart、onResume等幾個方法

當一開啟主Activity就會預設載入第一個Fragment也就是上面說的 A:


(把一寫影響檢視的給塗掉了)

分析:當A(DeviceDateSettingFragment)被使用者可見setUserVisibleHint 會回撥一個isVisibleToUser=true,然後在執行其他的


onCreatedView、onViewCreated、onActivityCreated、onStart、onResume等幾個回撥。

但是會發現DeviceSoundSettingFragment也就是B也會被建立初始化

第二步:點選第二個Tag B的時候同樣會預載入下個Tag,也就是C (DeviceSystemFragment)


第三步:點選第三個Tag C,同樣是預載入了第四個Tag 也就是D(DeviceMHSettingFragment)但是你會發現好像多了幾條Log,仔細一看就把第一個Tag A給銷燬掉了執行了onPause和onDestoryView回撥


(看上面圖片Log的列印順序,是先把之前的Tag A給銷燬,然後在初始話第四個Tag D)

第四步:點選第四個Tag 也就是D(DeviceMHSettingFragment),會發現少了很多Log,但是同樣的把原來的第二個Tag也就是B給銷燬了執行了onPause和onDestoryView回撥


第五步:再次點選第三個tag也就是C會發現原來被銷燬了的Tag B重新的被初始化了但是Tag A還是沒有列印任何Log


在點選Tag B,會發現第一個Tag A被重新初始化了,這個Tag D被銷燬進入了onPause和onDestoryView回撥


總結一下:viewPager機制是預設進行了懶載入當前頁的左右兩頁,其他的都會被銷燬進入onDestoryView回撥。

個人覺得setUserVisibleHint回撥在ViewPager+Fragment使用中很重要,可以根據這個回撥來處理很多

以上屬於個人理解,有錯誤請聯絡更正或留言,謝謝