天天看點

android ViewPager+Fragment之懶加載

說說寫這篇部落格的背景吧,前兩天去面試,問到一個問題說的是:比如我們首頁,是有3個fragment構成的,并且要是實作作用可以滑,那麼這個最好的選擇就是viewpager+fragment了,但是我們知道viewpager+fragment是做預加載的,然而這種方法有一個壞處,目前頁面和預加載頁面都有大量的網絡請求,可能就會比較慢,這樣就會造成不好打體驗。其實我們忽略的一個問題,android的fragment裡面已經幫我們提供了一個方法setuservisiblehint。setuservisiblehint()來顯示與隐藏fragment的。

我們看一下系統的代碼:

但是setuservisiblehint優于oncreate調用,是以當oncreate調用完畢setuservisiblehint就不會觸發,這時需要在首個顯示的fragment調用setuservisiblehint方法。

是以我們在第一個fragment建立成功之後,需要設定下下一個頁面是否展示

為了友善我們使用我們可以繼承fragment重寫一下setuservisiblehint方法。

說下這裡關于preparefetchdata的判斷邏輯:目前ui可見,并且fragment已經初始化完畢,如果網絡資料未加載,那麼請求資料,或者需要強制重新整理頁面,那麼再去請求頁面資料,這樣就達到了本文開始需要的要求。

用的話也聽友善的:

}

通過setoffscreenpagelimit進行fragment緩存

好了,最近面試面到的比較坑的問題還蠻多(比如intent底層實作,looper底層算法,ams等),借此機會好好看下源碼,歡迎留言。

繼續閱讀