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使用中很重要,可以根據這個回調來處理很多

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章