xml地图|网站地图|网站标签 [设为首页] [加入收藏]

Fragment的懒加载,懒加载BaseLazyFragment原理及代码

来源:http://www.ccidsi.com 作者:集成介绍 人气:77 发布时间:2020-03-01
摘要:首先大家来解析为何须要懒加载? 在我们的品类里平时会用到ViewPager Fragment达成选项卡滑动切换的功力,ViewPager会预加载下二个Framgment的剧情,那样的体制有帮助和益处也是有劣点:

首先大家来解析为何须要懒加载?

在我们的品类里平时会用到ViewPager Fragment达成选项卡滑动切换的功力,ViewPager会预加载下二个Framgment的剧情,那样的体制有帮助和益处也是有劣点:

懒加载的目标关键是选择于在有着几个Fragment并实行切换的时候,如viewPager。相信各位在写项目标时候,料定也可以有遭受过viewpager里的fragment实行了前后预加载,即3个fragment的多少加载,要通过setOffscreenPageLimit来设置预加载的类型,不安装setOffscreenPageLimit,则默以为1(设置0无效,能够查看该情势源码知道),即时设置了让她预加载为0了,也会奉行八个预加载。这几个很令人头痛,即大大裁减了品质,又浪费伊始化财富。可是大家选用懒加载技能就能够让客户观察的页面才会加载他的数据,大大升高功用。
懒加载的落到实处原理便是运用Fragment中的setUserVisibleHint(卡塔尔和onCreateView(卡塔尔(قطر‎,首假设利用了setUserVisibleHint(State of Qatar对fragment的可以预知状态监测和在oncreateView(卡塔尔(قطر‎前推行的长处。注意加载时,如若这一个fragment不可以见到的加载,那setUserVisibleHint(卡塔尔未有推行。
当viewPager中fragment改动可以预知状态, 使用getUserVisibleHint(卡塔尔国能够回去fragment是还是不是可以看到状态:从可阅览不见,为false;从不可知切换成可以预知,为true。
可知如图:切实参考博客****http://blog.csdn.net/mr_immortalz/article/details/51015196

叁个应用程式中只怕时时有这种布局:

预加载让顾客能够越来越快的收看接下来的从头到尾的经过,浏览起来连贯性越来越好,可是app在呈现内容的还要还扩充了附加的职分,那样恐怕影响分界面包车型大巴流畅度,并且或然招致流量的浪费。

此间写图片描述

皇家娱乐平台 1

日前大多的app都施用Fragment懒加运载飞机制,举个例子哔哩哔哩,360有线电话助手等等。

这里写图片描述

通用的做法是用ViewPager嵌套Fragment,那么onCreate那几个界面后,会同一时候加载当前当前fragment左右两侧的构造,当然也会有法子调控左边两边架构的数码:

落到实处Fragment懒加载也可能有非常多种艺术,也许有一点朋友会第有的时候间想到通过监听滚动的职责,通过决断Fragment的加载状态达成懒加载,这种措施的通病便是把得以达成暴光在Framgment之外,从包装的角度来讲那不是一个好的方案。

此地写图片描述

/** * @param limit How many pages will be kept offscreen in an idle state. */public void setOffscreenPageLimit(int limit) {

最佳的方案在英特网早已处处可知了,那正是重写Fragment的setUserVisibleHint()方法,完毕Fragment内部的懒加运载飞机制。

那边写图片描述

源码的笺注什么意思啊,举例viewPager.setOffscreenPageLimit,那么会同期成立左右两侧的2个fragment,借使左边未有则不创制。换句话说,滑动到第N个,会确定保证N-2,N-1,N ,N 1,N 2都已经加载,假诺.....N-4,N-3,N 3,N 4.....已开立,则会被灭绝。

率先大家看看那些办法的阐明:

此间写图片描述

那就是说难题就来了,若是刚进来主分界面就加载3个fragment,会增添手提式有线电话机脾气的耗费,大概客商只想看率先个。又举个例子客户对第八个fragment感兴趣,那完蛋了,恐怕34567并且加载了,那自然不得以选拔的。此前本人是如此消灭,setOffscreenPageLimit,可是也失常,倘使客商时时在这里多少个fragment中来回切换,那么viewpager会及时的消亡,大概就能够扬弃一些客户的操作记录,fragment重复创设销毁也会大增内部存款和储蓄器损耗,一个优越的APP应该思索这一个难题。

/*** Set a hint to the system about whether this fragment's UI is currently visible* to the user. This hint defaults to true and is persistent across fragment instance* state save and restore.** <p>An app may set this to false to indicate that the fragment's UI is* scrolled out of visibility or is otherwise not directly visible to the user.* This may be used by the system to prioritize operations such as fragment lifecycle updates* or loader ordering behavior.</p>** <p><strong>Note:</strong> This method may be called outside of the fragment lifecycle.* and thus has no ordering guarantees with regard to fragment lifecycle method calls.</p>** @param isVisibleToUser true if this fragment's UI is currently visible to the user ,* false if it is not.*/

注意:滑动到第多少个fragment时,第二个fragment移除了相关的视图但未和平运动动消逝关系。所以从3滑回2时,