Android之延迟加载(LazyLoading)

什么是延迟加载?

延迟加载也称为惰性加载,例如在长网页中延迟加载图像。用户滚动到它们之前,视口外的图像不会加载。这与图像预加载相反,在长网页上使用延迟加载将使网页加载更、可以帮助减少服务器负载。

延迟加载的好处?

  1. 首先它能提升用户的体验。试想一下,如果打开页面的时候就将页面上所有的图片全部获取加载,如果图片数量较大,对于用户来说简直就是灾难,会出现卡顿现象,影响用户体验。
  2. 有选择性地请求图片,这样能明显减少了服务器的压力和流量,也能够减小浏览器的负担、APP流量。

实际例子:

  1. 打开淘宝首页,只有在浏览器窗口里的图片才会被加载,当你滚动首页向下滑的时候,进入视口内的图片才会被加载,而其它从未进入视口的图像不会也不会加载。
  2. 打开微信,左右滑动Viewpager,可以发现它同样使用延迟加载。

网上例子,仿微信延迟加载,其中Viewpager有个方法:

viewPager.setOffscreenPageLimit()

该方法设置ViewPager允许有多少张pages存在于屏幕外(不包括正在显示的page),默认值是1。在范围之外的pages 的View会被销毁,即onDestroyView()会被执行。

拓展:

Viewpager里面FragmentPagerAdapter、FragmentStatePagerAdapter的区别: 

1.FragmentPagerAdapter

它会将每一个生成的Fragment都放到内存中,即无论怎么滑动切换ViewPager,都不会有一个Fragment的onDestroy方法被调用。但是,Fragment不在viewPager.setOffscreenPageLimit(n)保护的范围内会调用FragmentManager的detach()方法,相应的Fragment的onDestroyView会执行,但Fragment实例仍在!所以该类适用于需要展示的Fragment比较少的情况。

2.FragmentStateAdapter

它有点类似于Listview的RecyclerBin机制,当Fragment不在viewPager.setOffscreenPageLimit(n)保护的范围内,Fragment的就会被销毁,onDestroy()、onDetach()方法会被执行。适用于要展示Fragment数量比较多,Fragment的子View和数据量复杂的情况。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值