Android 懒加载简单介绍
1.懒加载介绍
1.1.效果预览

1.2.效果讲解
当页面可见的时候,才加载当前页面。
没有打开的页面,就不会预加载。
说白了,懒加载就是可见的时候才去请求数据。
1.3.懒加载文章传送门
1.4.懒加载的意义以及使用原因
我们在使用viiewpage与多个Fragment组合使用的时候,如果每个fragment都需要加载数据,或从本地加载,
或从网络加载,那么在这个activity刚创建的时候就需要初始化大量资源。
viewpager默认一次加载当前页面前后两个页面,即使设置setofflimit(0)也没有效果,这就是预加载。
这样把我们看不到的页面的数据也加载了,大大降低了性能,浪费初始化资源。
如果我们采用懒加载技术,只让用户看到的页面才会加载需要的数据,这样也更加人性化,也大大提高效率。
2.使用懒加载的方法
2.1.按照每个人的需求可能不一样,但是核心是一样的。
那就是这个setUserVisibleHint函数。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//执行逻辑代码
}
这个函数的作用就是:
当fragment被用户可见时,setUserVisibleHint()会调用且传入true值,
当fragment不被用户可见时,setUserVisibleHint()则得到false值。
而在传统的fragment生命周期里也看不到这个函数。
可以参考这篇文章:Fragment的setUserVisibleHint详解。
2.2.简单的一个案例==>当Fragment可见的时候执行一个抽象函数来加载数据。
public abstract class LazyLoadFragment extends BaseFragment {
protected boolean isViewInitiated;//判断视图是否初始化
protected boolean isVisibleToUser;//用户是否可见
protected boolean isDataInitiated;//数据是否初始化
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
isViewInitiated = true;
prepareFetchData();
}
//在所有生命周期函数之前调用,查看是否可见
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
prepareFetchData();
}
//定义一个抽象函数,在子类中实现,作用就是加载初始化数据
public abstract void fetchData();
//准备加载数据,这里不是强制刷新
public boolean prepareFetchData() {
return prepareFetchData(false);
}
//用户强制刷新的话,就应该是用户主动进行刷新了,当然也要去取数据了,用户第一嘛
public boolean prepareFetchData(boolean forceUpdate) {
if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
fetchData();
isDataInitiated = true;
return true;
}
return false;
}
}
解释一下:这个BaseFragment就是最基础的基类了,里面进行一些最底层的设置,定义抽象函数:
比如布局文件的绑定,初始化视图控件,初始化数据,初始化Toolbar
所以这个懒加载LazyLoadFragment基本上是隔离开了。
耦合度相当低,基本都可以这样使用吧。
3.总结一下吧
3.1.viewpager监听切换tab事件,tab切换一次,执行一次setUserVisibleHint方法。
3.2.setUserVisibleHint()在fragmetn所有生命周期之前,无论viewpager是在activity哪个生命周期里初始化的。
3.3.activity生命周期和fragment生命周期时序并不是按序来的,因为执行速度很快,嗖的一下就执行完了。
所以fragment的onCreate方法时序并不一定在activity的onCreate方法之后。
这就是为什么我调试的时候,编译器老是不按照常理的顺序来,一下子跳这儿,一下那儿的。
3.4.最后看一下Activity和Fragment的生命周期图解吧。

Android 懒加载简单介绍的更多相关文章
- Android ndk 加载简单的gif 图像
首先获取一个安卓权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> ...
- hexo next主题深度优化(二),懒加载。
文章目录 tip:没有耐心的可以直接看:正式在hexo next中加入懒加载(最下面) 废话 背景 懒加载简单介绍 引入js 重点!敲黑板了!!! 完善懒加载函数 懒加载函数可配置的参数 正式在hex ...
- vue的路由懒加载
路由懒加载官方介绍 非懒加载写法: import Login from '@/components/Login' 所有路由涉及到的文件会被打包到 app.xxx.js 中 懒加载写法: const L ...
- swift学习第十六天:懒加载和tableView
懒加载 懒加载的介绍 swift中也有懒加载的方式 (苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不同的是swift有专门的关键字来实现懒加载 lazy关键字可以用于定义某一个属 ...
- vue路由懒加载及组件懒加载
一.为什么要使用路由懒加载 为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 二.定义 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 三.使用 常用的懒加载方式 ...
- vue中页面卡顿,使用懒加载
为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的imp ...
- 【Android】Fragment懒加载和ViewPager的坑
效果 老规矩,先来看看效果 ANDROID和福利两个Fragment是设置的Fragment可见时加载数据,也就是懒加载.圆形的旋转加载图标只有一个,所以,如果当前Fragment正处于加载状态,在离 ...
- 【Android】再来一篇Fragment懒加载(只加载一次哦)
效果 老规矩,先来看看效果图 没错,我又入坑了,又重新做了个 Gank 客户端,因为之前那个代码写得太烂了,这次有好好的考虑了下架构之类的事,代码应该会更容易读懂了点了,吧.哈哈,再次欢迎来 star ...
- jquery实现简单瀑布流布局(续):图片懒加载
# jquery实现简单瀑布流布局(续):图片懒加载 这篇文章是jquery实现简单瀑布流布局思想的小小扩展.代码基于前作的代码继续完善. 图片懒加载就是符合某些条件时才触发图片的加载.最常见的具体表 ...
随机推荐
- 增加ssh无密码信任连接的安全性
为了方便系统管理或者服务器运维自动化,我们通常要在服务器间做ssh无密码信任连接. 环境:目标主机 centos7 192.168.150.110操作主机 centos7-cn 19 ...
- 【Android 界面效果47】RecyclerView详解
RecylerView作为 support-library发布出来,这对开发者来说绝对是个好消息.因为可以在更低的Android版本上使用这个新视图.下面我们看如何获取 RecylerView.首先打 ...
- SQL获得连续的记录的统计
SELECT TYEAR, MIN(TDATE) AS STARTDATE, MAX(TDATE), COUNT(TYEAR) AS ENDNUM --TYEAR年,STARTDATE连续记录的开始时 ...
- php的yii框架开发总结4
用户验证的实现:/protected/components/UserIdentity.php 修改:function authenticate()函数中的语句 public function auth ...
- 如何在windows下安装配置pyspark notebook
第一步:安装anaconda anaconda自带一系列科学计算包 下载链接:http://pan.baidu.com/s/1b4jWlg 密码:fqq3 接着配置环境变量:如我安装在D盘下 试一 ...
- Sublime Text3 + Markdown + 实时预览
Sublime Text3是一款给力的文本编辑器,通过安装插件可以编辑Markdown文本,在编辑Markdown文本的同时可以实时预览编辑效果. 安装准备: 找到菜单栏:Preferences → ...
- Altium_Designer17-PCB-如何重新定义板子外形
当我们绘制完电路图.完成PCB布局和布线后,我们会遇到下面这种情况: 发现什么了吗?那么大的黑框框,我们只用到了很少的一部分.那有啥?告诉你黑框框的大小就是你最后将要印刷的PCB板的实际大小!大家都知 ...
- SAP成都研究院飞机哥: SAP C4C中国本地化之微信聊天机器人的集成
今天的文章仍然来自Jerry的老同事,SAP成都研究院的张航(Zhang Harry).关于他的背景介绍,请参考张航之前的文章:SAP成都研究院飞机哥:程序猿和飞机的不解之缘.下面是他的正文. 大家好 ...
- LayoutParams布局
AbsoluteLayout.LayoutParams可以重新设置坐标,然后调用setLayoutParamsLinearLayout.LayoutParams可以调用setMargins();来移动 ...
- 多线程, Thread类,Runnable接口
多线程 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 单线程程序:即,若有多个任务只能依次执 ...