關於Fragment的懶加載問題


  為了達到界面效果,我們有時需要使用到TabLayout+ViewPager的方式來布局界面,然而ViewPageradapter總是默認把與當前可見的fragment相鄰的兩個fragment給加載出來.一旦界面數據太多,信息量太大,往往造成資源過多消耗,界面卡頓,甚至會造成程序崩潰...這時,我們就需要使用到fragment的懶加載方式,即第一次看到的時候自動加載當前頁面,相鄰的fragment不再預加載.

  Google官網提供給我們setUserVisibleHint這個方法。(API地址:http://androiddoc.qiniudn.com/reference/android/app/Fragment.html#setUserVisibleHint(boolean) ),這個方法的調用時期:當前fragment對用戶可見時調用.

那么,是否可以在setUserVisibleHint(boolean isVisibleToUser)里進行數據加載操作來實現懶加載呢?

可以是可以,如果你只是需要數據的懶加載的話,但如果你還有以下的需求,那么這種方式就不行了:

1、如果在Fragment可見時需要進行一些控件的操作,比如顯示加載控件

2、如果還需要在Fragment從 ""可見" 到 "不可見”時進行一些操作的話,比如取消加載控件顯示

經過調試,setUserVisibleHint()可能會在Fragment的生命周期之外被調用,也就是可能在view創建前就被調用,也可能在destroyView后被調用,所以如果涉及到一些控件的操作的話,可能會報 null 異常,因為控件還沒初始化,或者已經摧毀了。

 基於這個基礎,我們需要達到具體的效果是:預加載時只做輕量的初始化; 

第一次可見狀態下才開始加載數;

                   ③在把生命周期拆成 “可見”與“不可見”狀態

                   不被繁瑣的生命周期拖延時間;

上代碼了:第一次可見狀態、可見狀態、第一次不可見狀態、不可見狀態四種狀態

  

 這樣的話,一個Fragment懶加載的基類就寫完了,只需要讓自己的子Fragment繼承就好了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM