Android之Fragment懶載入
還記得以前使用ViewPager+Fragment時根本不考慮效率問題,一股腦的多頁資料載入導致卡死,還自我安慰說我設定了setOffscreenPageLimit了啊,而實際上跟蹤原始碼我們發現DEFAULT_OFFSCREEN_PAGES = 1,所以即便setOffscreenPageLimit我設定為0,ViewPager最少也會載入後一頁。為了保證效率現在都提倡一種懶載入的機制,即只有當前頁面為顯示頁面才會載入且只加載一次資料(做一次耗時操作:或網路請求或本地資料)。有同學說我可以拷貝原始碼把預設改為0啊,是可以這麼多,但是改變了viewpager的初衷,不夠靈活。在實際專案中我還是建議改造BaseFragment,利用setUserVisibleHint,暴露懶載入的方法,根據需要過載懶載入方法做實際操作。
下面來看具體的改造方法:
1.設定兩個標識
private boolean isViewPrepared; // 標識fragment檢視已經初始化完畢
private boolean hasFetchData; // 標識已經觸發過懶載入資料
2.建立懶載入的資料載入方法
/** 懶載入的方式獲取資料,僅在滿足fragment可見和檢視已經準備好的時候呼叫一次 */
protected void lazyFetchData() {
Log.v(TAG, getClass().getName() + "------>lazyFetchData");
}
3.以上兩個標識值的判定:
- 在onViewCreated方法中(即表明檢視已經準備完畢)isViewPrepared = true;
- 在onDestroyView方法中(view被銷燬後,將可以重新觸發資料懶載入,因為在viewpager下,fragment不會再次新建並走onCreate的生命週期流程,將從onCreateView開始)hasFetchData = false; isViewPrepared = false;
4.判定是否需要載入資料
private void lazyFetchDataIfPrepared() {
// 使用者可見fragment && 沒有載入過資料 && 檢視已經準備完畢
if (getUserVisibleHint() && !hasFetchData && isViewPrepared) {
hasFetchData = true; //已載入過資料
lazyFetchData();
}
}
5.lazyFetchDataIfPrepared方法的呼叫時機
- onViewCreated方法中呼叫lazyFetchDataIfPrepared方法,此時只有首頁會符合條件
- setUserVisibleHint
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
Log.v(TAG, getClass().getName() + "------>isVisibleToUser = " + isVisibleToUser);
if (isVisibleToUser) {//噹噹前為顯示頁面時
lazyFetchDataIfPrepared();
}
}
6.子類Fragment根據需要過載lazyFetchData方法(訪問網路載入資料)
@Override
protected void lazyFetchData() {
((DiscoverPresenter) mPresenter).getData();
}
整個改造就算結束了,是不是很簡單,為了不讓你的fragment不那麼累趕緊試試吧(如果還有不懂可以參照原始碼)。
相關推薦
Android之Fragment懶載入
還記得以前使用ViewPager+Fragment時根本不考慮效率問題,一股腦的多頁資料載入導致卡死,還自我安慰說我設定了setOffscreenPageLimit了啊,而實際上跟蹤原始碼我們發現DEFAULT_OFFSCREEN_PAGES = 1,所以即便s
Android之Fragment的懶載入
一、背景 在Android應用中,ViewPager是我們不可避免使用的一個控制元件,因為它可以使我們在佔用較少空間的同時,增強內容的豐富性,同時以其內部流淌著Google的血液,所以它幾乎成了每一個App的標配控制元件。但是,假如ViewPager的每一個Fragment都需要通過網路拉取資料
Android使用setUserVisibleHint()實現Fragment懶載入
Fragment 懶載入使用場景 當使用viewpager+adapter作為應用大的佈局時,viewpager會通過setOffscreenPageLimit來設定預載入的專案,不設定setOffscreenPageLimit,則預設為1(設定0無效,可以檢視該方法原始碼知道),也就是
Android多個fragment懶載入的坑(卡頓)
在Android開發中,有很多種情況都是viewpage+fragment左右滑動進行佈局的,例如下面的今日頭條 在今日頭條app上,我們可以看到,其頂部都是一欄的型別資料來源,可滑動,可聯動下面的viewpage裡的fragment,但是很多時候,viewpage+fragment中
android Fragment懶載入,當頁面可見時載入資料
// 儲存之前的介面,否則會重新呼叫onCreateView viewPager.setOffscreenPageLimit(fragmentList.size()); fragm
【java】itoo項目實戰之hibernate 懶載入優化性能
bsp xtra extra pda 程序 前端框架 外連接 獲取 轉換成 在做itoo 3.0 的時候,考評系統想要上線,就開始導入數據了,僅僅導入學生2萬條數據,可是導入的速度特別的慢。這個慢的原因是由於導入的時候進行了過多的IO操作。可是導入成功之後,
Android之Volley框架載入網路圖片
更多幹貨 分散式實戰(乾貨) spring cloud 實戰(乾貨) mybatis 實戰(乾貨) spring boot 實戰(乾貨) React 入門實戰(乾貨) 構建中小型網際網路企業架構(乾貨) python 學習持續更
Swift 4.0學習之:懶載入
九: 懶載入 懶載入是一個在專案中特別常用的東西,在OC中,一般是通過重寫getter方法來實現,但是在Swift裡,多了一個叫 lazy 的修飾符,多麼形象生動的命名。具體應用舉例如下:
Xamarin.Android之Fragment Walkthrough
利用Fragment設計能夠相容不同螢幕的應用 這裡我們先圍觀下最後的成果圖,給讀者打打氣: 普通手機上顯示的結果: 在平板上顯示的結果: 筆者要鄭重宣告下,雖然看似是兩種不同的顯示效果,但是同一個應用,而下面筆者將逐步教會大家如何利用Fragment製作出能夠相容不同螢幕的應用。
Android之打造自己載入高清大圖及瀑布流框架.解決錯位等問題.
首先看效果圖如下: 本框架支援本地圖片和網路圖片的獲取.採用LruCache演算法,最少使用的最先釋放.有效的避免OOM,專案結構圖: 核心載入類在於ImageLoader.採用了TreadPool去做併發請求.UI處理採用Handler
fragment 懶載入2
效果 老規矩,先來看看效果 效果圖 ANDROID和福利兩個Fragment是設定的Fragment可見時載入資料,也就是懶載入。圓形的旋轉載入圖示只有一個,所以,如果當前Fragment正處於載入狀態,在離開該Fragment時需要隱藏載入動畫,因為另一個Fragment並不一定處於載入狀態,當返回F
Android之網路圖片載入的5種基本方式
學了這麼久,最近有空把自己用到過的網路載入圖片的方式總結了出來,與大家共享,希望對你們有幫助。此部落格包含Android 5種基本的載入網路圖片方式,包括普通載入HttpURLConnection、HttpClients、Volley、XUtils、OkHttp等網路載入圖片
Android之Fragment
碎片是什麼 碎片(Fragment)是一種可以嵌入在活動當中的UI片段,它能讓程式更加合理和充分地利用大螢幕的空間,因而在平板上應用的非常廣泛。雖然碎片對你來說應該是個全新的概念,但我相信你學習起來應該毫不費力,因為它和活動實在是太像了,同樣都能包含佈局,同樣都有自己的
Android之Fragment的靜態使用
1 Fragment的產生與介紹 》 Fragment,也就是碎片,本意是為了適配大螢幕的安卓裝置而生的。執行Android的裝置繁多,螢幕大小更是多種多樣。針對不同螢幕尺寸,通常情況下,開發者都是先針對手機開發一套原始碼,然後拷貝一份,修改佈局以適應大
iOS---tableview載入圖片的時候的優化之lazy(懶載入)模式and非同步載入模式
舉個例子,當我們在用網易新聞App時,看著那麼多的新聞,並不是所有的都是我們感興趣的,有的時候我們只是很快的滑過,想要快速的略過不喜歡的內容,但是隻要滑動經過了,圖片就開始載入了,這樣使用者體驗就不太好,而且浪費記憶體. 這個時候,我們就可以利
爬蟲之圖片懶載入技術、selenium和PhantomJS
爬蟲之圖片懶載入技術、selenium和PhantomJS 圖片懶載入 selenium phantomJs 谷歌無頭瀏覽器 一.圖片懶載入 什麼是圖片
android之Fragment的bug解決
最近做一個功能,當第二次進入一個介面的時候出現一個奇怪的bug,如下面詳細的log資訊: 10-01 13:36:23.549: E/AndroidRuntime(14188): Process: com.android.settings, PID: 14188 10-01
Android之Fragment動態新增和移除Fragment
fragment_demo.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
多層巢狀後的 Fragment 懶載入實現
多層巢狀後的 Fragment 懶載入 印象中從 Feed 流應用流行開始,Fragment 懶載入變成了一個大家都需要關注的開發知識,關於 Fragment 的懶載入,網上有很多例子,GitHub 上也有很多例子,就連我自己在一年前也寫過相關的文章。
Android之fragment的基本使用
1.在xml中佈局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"