日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

ViewPager如何通過預加載機制提高滑動性能,以及如何屏蔽預加載策略的方法

來源: 責編: 時間:2024-06-17 08:44:37 203觀看
導讀ViewPager默認具有預加載機制,會預先加載當前頁面前后的一定數量的頁面,以便在滑動時能夠迅速顯示新頁面。預加載的數量可以通過setOffscreenPageLimit(int limit)方法來設置,但最小值通常為1,意味著前后各預加載一個頁面

ViewPager默認具有預加載機制,會預先加載當前頁面前后的一定數量的頁面,以便在滑動時能夠迅速顯示新頁面。預加載的數量可以通過setOffscreenPageLimit(int limit)方法來設置,但最小值通常為1,意味著前后各預加載一個頁面。cxu28資訊網——每日最新資訊28at.com

public void setOffscreenPageLimit(int limit) {    if (limit < 1) {        Log.w("ViewPager", "Requested offscreen page limit " + limit + " too small; defaulting to " + 1);        limit = 1;    }    if (limit != this.mOffscreenPageLimit) {        this.mOffscreenPageLimit = limit;        this.populate();    }}

下面看看預加載的是什么,在預加載數量更新的時候,執行polulate()方法。cxu28資訊網——每日最新資訊28at.com

void populate(int newCurrentItem) {    ViewPager.ItemInfo oldCurInfo = null;    if (this.mCurItem != newCurrentItem) {        oldCurInfo = this.infoForPosition(this.mCurItem);        this.mCurItem = newCurrentItem;    }    if (this.mAdapter == null) {        this.sortChildDrawingOrder();    } else if (this.mPopulatePending) {        this.sortChildDrawingOrder();    } else if (this.getWindowToken() != null) {        this.mAdapter.startUpdate(this);//被棄用了        int pageLimit = this.mOffscreenPageLimit;//當前的緩存頁面個數        int startPos = Math.max(0, this.mCurItem - pageLimit);//計算緩存的開始位置        int N = this.mAdapter.getCount();//adapter的子內容的數量        int endPos = Math.min(N - 1, this.mCurItem + pageLimit);//計算緩存的結束位置        if (N != this.mExpectedAdapterCount) {            String resName;            try {                resName = this.getResources().getResourceName(this.getId());            } catch (NotFoundException var17) {                resName = Integer.toHexString(this.getId());            }            throw new IllegalStateException("The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: " + this.mExpectedAdapterCount + ", found: " + N + " Pager id: " + resName + " Pager class: " + this.getClass() + " Problematic adapter: " + this.mAdapter.getClass());        } else {            int curIndex = true;            ViewPager.ItemInfo curItem = null;            //開始去找 ViewPager.ItemInfo            int curIndex;            for(curIndex = 0; curIndex < this.mItems.size(); ++curIndex) {                ViewPager.ItemInfo ii = (ViewPager.ItemInfo)this.mItems.get(curIndex);                if (ii.position >= this.mCurItem) {                    if (ii.position == this.mCurItem) {                        curItem = ii;                    }                    break;                }            }            //沒找到就去創建 ViewPager.ItemInfo,并放入ArrayList<ViewPager.ItemInfo> mItems中            if (curItem == null && N > 0) {                curItem = this.addNewItem(this.mCurItem, curIndex);            }            int itemIndex;            ViewPager.ItemInfo ii;            int i;            ·····一些計算操作,省略        }                    this.mAdapter.finishUpdate(this);//完成條目的更新        int childCount = this.getChildCount();        for(itemIndex = 0; itemIndex < childCount; ++itemIndex) {            View child = this.getChildAt(itemIndex);            ViewPager.LayoutParams lp = (ViewPager.LayoutParams)child.getLayoutParams();            lp.childIndex = itemIndex;            if (!lp.isDecor && lp.widthFactor == 0.0F) {                ViewPager.ItemInfo ii = this.infoForChild(child);                if (ii != null) {                    lp.widthFactor = ii.widthFactor;                    lp.position = ii.position;                }            }        }        this.sortChildDrawingOrder();    }}

ViewPager通過計算當前頁面的索引(mCurItem)和預加載頁面的限制數量(mOffscreenPageLimit或pageLimit)來確定需要預加載的頁面范圍。通過Math.max(0, mCurItem - pageLimit)計算預加載的起始頁面索引(startPos),通過Math.min(N-1, mCurItem + pageLimit)計算預加載的結束頁面索引(endPos),N是頁面總數。在這個范圍內,ViewPager會提前加載并創建頁面實例,以減少用戶滑動到這些頁面時的加載時間。cxu28資訊網——每日最新資訊28at.com

cxu28資訊網——每日最新資訊28at.com

當ViewPager的當前頁面改變時,會根據新的當前頁面索引和預加載范圍來加載或銷毀頁面實例。如果某個頁面實例不再處于預加載范圍內,它將被銷毀以釋放內存。cxu28資訊網——每日最新資訊28at.com

ViewPager.ItemInfo addNewItem(int position, int index) {    ViewPager.ItemInfo ii = new ViewPager.ItemInfo();    ii.position = position;        ii.object = this.mAdapter.instantiateItem(this, position);    ii.widthFactor = this.mAdapter.getPageWidth(position);    if (index >= 0 && index < this.mItems.size()) {        this.mItems.add(index, ii);    } else {        this.mItems.add(ii);    }    return ii;}

調用instantiateItem來創建object,在FragmentPagerAdapter的instantiateItem這個方法中,創建的是Fragment,即緩存的就是Fragment,Fragment在創建時,會有UI操作,網絡操作,在還未可見的時候初始化Fragment非常消耗性能,所以應該懶加載的方式來加載,不去緩存Fragment。cxu28資訊網——每日最新資訊28at.com

ViewPager屏蔽預加載方式:cxu28資訊網——每日最新資訊28at.com

  1. 「設置setOffscreenPageLimit(int limit)方法的limit為0」:

理論上,這是最直接的方法,實際上setOffscreenPageLimit(int limit)方法中的limit值有一個最小值限制,即使你設置為0,也會自動調整為1。因為ViewPager的設計初衷就是為了預加載相鄰的頁面以提高滑動性能。cxu28資訊網——每日最新資訊28at.com

  1. 「自定義ViewPager」:

「方法一」:復制ViewPager的源代碼,并修改DEFAULT_OFFSCREEN_PAGES常量的值為0。cxu28資訊網——每日最新資訊28at.com

「方法二」:繼承ViewPager類,重寫setOffscreenPageLimit(int limit)方法,利用反射修改mOffscreenPageLimit屬性的值。這種方法可能涉及到對Android系統內部實現的深入了解,并且可能隨著Android版本的更新而失效。cxu28資訊網——每日最新資訊28at.com

  1. cxu28資訊網——每日最新資訊28at.com

    「調整PagerAdapter」:cxu28資訊網——每日最新資訊28at.com

    cxu28資訊網——每日最新資訊28at.com

可以通過調整PagerAdapter中的instantiateItem和destroyItem方法來控制頁面的加載和銷毀。例如,可以在這些方法中實現更精細的頁面管理策略,以減少不必要的資源消耗。cxu28資訊網——每日最新資訊28at.com

  1. cxu28資訊網——每日最新資訊28at.com

    「懶加載技術」:cxu28資訊網——每日最新資訊28at.com

    cxu28資訊網——每日最新資訊28at.com

在Fragment或頁面內容中使用懶加載技術。頁面只有在真正需要顯示時才會被加載。這可以通過在Fragment的setUserVisibleHint(boolean isVisibleToUser)方法中判斷頁面是否可見來實現。cxu28資訊網——每日最新資訊28at.com

  1. cxu28資訊網——每日最新資訊28at.com

    「注意事項」:cxu28資訊網——每日最新資訊28at.com

    cxu28資訊網——每日最新資訊28at.com

屏蔽預加載可能會影響ViewPager的滑動性能,當用戶滑動到新的頁面時,該頁面可能需要花費更長的時間來加載。cxu28資訊網——每日最新資訊28at.com

在決定屏蔽預加載之前,權衡好性能和資源消耗之間的平衡。cxu28資訊網——每日最新資訊28at.com

cxu28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-94136-0.htmlViewPager如何通過預加載機制提高滑動性能,以及如何屏蔽預加載策略的方法

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 發給馬斯克 560 億美元,特斯拉為什么還漲了

下一篇: 15個超好看的登錄頁面(附源碼)

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久精品九九| 中文久久精品| 国产一区二区三区直播精品电影| 国产伦理一区| 在线观看一区二区视频| 亚洲国产裸拍裸体视频在线观看乱了 | 久久一区二区三区国产精品 | 欧美日韩不卡合集视频| 国产精品伊人日日| 在线欧美小视频| 一区二区国产日产| 亚洲欧洲av一区二区| 裸体一区二区三区| 国产精品成人一区| 在线不卡中文字幕| 亚洲一区黄色| 牛牛国产精品| 国产精品中文在线| 亚洲人精品午夜| 欧美在线啊v| 欧美人交a欧美精品| 国产一区二区三区高清在线观看| 亚洲美女91| 久久久久成人精品免费播放动漫| 欧美日韩美女| 伊人精品久久久久7777| 亚洲欧美国产高清| 欧美黄色大片网站| 国产一区二区三区四区五区美女| 亚洲精品一区二区三区在线观看 | 亚洲精品乱码久久久久久蜜桃麻豆| 欧美一区二区视频97| 欧美乱妇高清无乱码| 国产一区二区三区的电影| 一本一道久久综合狠狠老精东影业| 久久免费国产精品1| 国产精品久久久久免费a∨| 亚洲国产精品黑人久久久| 性做久久久久久久免费看| 欧美日韩亚洲一区二区三区四区| 揄拍成人国产精品视频| 午夜亚洲性色视频| 欧美日韩在线精品| 亚洲国产经典视频| 久久久久久久999精品视频| 国产精品久久久久久久久久免费 | 欧美在线视频在线播放完整版免费观看 | 亚洲国产欧美精品| 欧美综合77777色婷婷| 欧美性片在线观看| 最新亚洲视频| 噜噜噜91成人网| 国产欧美日韩在线视频| 中文久久乱码一区二区| 欧美精品v日韩精品v韩国精品v | 日韩视频免费观看| 免费不卡亚洲欧美| 狠狠色综合日日| 欧美一区亚洲二区| 国产精品视频久久久| 亚洲精品一区二| 欧美激情女人20p| 亚洲高清网站| 久久久亚洲国产天美传媒修理工 | 亚洲欧美久久久久一区二区三区| 欧美性淫爽ww久久久久无| 日韩亚洲视频在线| 欧美精品免费播放| 亚洲精品社区| 欧美精品粉嫩高潮一区二区| 最近中文字幕mv在线一区二区三区四区| 久久精品国产第一区二区三区最新章节| 国产精品永久入口久久久| 亚洲欧美日韩综合国产aⅴ| 国产精品乱人伦中文| 亚洲伊人第一页| 国产精品毛片在线看| 亚洲午夜精品在线| 国产精品极品美女粉嫩高清在线| 一本色道久久加勒比精品| 欧美日韩精品免费观看视频完整| 日韩一级网站| 欧美日韩中文字幕精品| 一区二区三区日韩精品| 欧美日韩中文在线观看| 一区二区三区偷拍| 国产精品黄视频| 亚洲综合三区| 国产日本精品| 久久av在线| 亚洲成人在线| 欧美精品不卡| 一区二区三区四区五区在线| 国产精品国产三级欧美二区| 亚洲免费小视频| 国产亚洲福利一区| 久久亚洲欧洲| 91久久精品美女高潮| 欧美日韩精品久久久| 亚洲网址在线| 国产日韩综合一区二区性色av| 久久国产精品久久久久久| 影音先锋亚洲精品| 欧美精品福利| 亚洲女优在线| 禁断一区二区三区在线| 欧美成人一区二区在线| 一本色道久久综合| 国产精品视频最多的网站| 久久精品国产亚洲aⅴ| 亚洲国产精品ⅴa在线观看 | 欧美国产日韩a欧美在线观看| 一本久道久久久| 国产女人精品视频| 久久综合九九| 亚洲最黄网站| 国产午夜精品一区二区三区欧美 | 亚洲男女自偷自拍| 韩国av一区二区三区在线观看| 欧美a级片一区| 亚洲一区久久久| 黄色综合网站| 欧美日韩免费观看中文| 午夜精品福利视频| 亚洲大片一区二区三区| 欧美三区美女| 久久久国产成人精品| 999在线观看精品免费不卡网站| 国产伦精品一区二区三区在线观看| 久久久青草青青国产亚洲免观| 一本色道久久88综合亚洲精品ⅰ| 国产一区二区三区四区五区美女| 欧美激情一二三区| 欧美一级片在线播放| 91久久国产精品91久久性色| 国产精品免费区二区三区观看| 可以看av的网站久久看| 99视频精品全国免费| 国产又爽又黄的激情精品视频 | 欧美精品日本| 欧美在线|欧美| av72成人在线| 影音先锋亚洲精品| 国产精品美女999| 欧美国产一区在线| 久久福利精品| 亚洲一级在线观看| 亚洲国产综合在线| 国产视频亚洲精品| 欧美色欧美亚洲另类七区| 久久视频国产精品免费视频在线| 中文在线资源观看视频网站免费不卡| 尤物yw午夜国产精品视频| 国产精品午夜在线观看| 欧美剧在线观看| 久久香蕉国产线看观看网| 亚洲免费在线视频| 亚洲日本中文字幕| 极品少妇一区二区三区| 国产精品综合久久久| 欧美日韩中文精品| 欧美激情视频免费观看| 久久久精彩视频| 午夜精品一区二区三区在线播放| 99国产精品99久久久久久| 影音先锋亚洲精品| 国产日韩一区在线| 国产精品久久中文| 欧美日韩精品综合在线| 免费亚洲电影在线观看| 久久精品国产视频| 午夜精品久久久久久久99水蜜桃| 99国产精品久久久久久久| 亚洲国产成人精品女人久久久 | 国产精品久久久久9999高清| 欧美精品久久一区| 免费在线亚洲| 久久手机精品视频| 久久久av毛片精品| 欧美自拍偷拍午夜视频| 亚洲欧洲av一区二区| 亚洲素人一区二区| 一本大道av伊人久久综合| 亚洲毛片在线| 亚洲精品久久久久久久久久久久| 在线免费观看日韩欧美| 精品不卡视频| 激情婷婷久久| 激情欧美一区二区三区| 国产尤物精品| 国产专区一区| 国内精品美女av在线播放| 国产一区二区三区观看| 国产拍揄自揄精品视频麻豆| 国产精品亚洲激情| 国产精品自拍三区| 国产精品亚洲欧美| 国产精品高潮粉嫩av| 国产精品久久婷婷六月丁香| 国产精品综合网站| 国产一区二区视频在线观看| 狠狠久久亚洲欧美专区| 在线观看91精品国产入口| 亚洲国产99精品国自产|