一、背景:为何须要懒加载。 app
咱们在作安卓项目的时候,常常会有一个使用场景:ViewPage与多个Fragment组合使用。 性能
然而,viewpager有着预加载机制:默认一次加载当前页面先后两个页面,即便设置setOffLimit(0)也没有效果。 虽然预加载优化了app的体验效果,可是这样把咱们看不到的页面的数据也加载了,大大下降了性能,浪费初始化资源。 优化
这时候,咱们就须要懒加载。 指针
二、什么是懒加载:懒加载的定义。blog
当页面可见的时候,才加载当前页面。 没有打开的页面,就不会预加载。生命周期
说白了,懒加载就是可见的时候才去请求数据。资源
三、实现方法get
(1)关键点 it
主要的方法是Fragment中的setUserVisibleHint(),此方法会在onCreateView()以前执行,当viewPager中fragment改变可见状态时也会调用,当fragment 从可见到不见,或者从不可见切换到可见,都会调用此方法,使用getUserVisibleHint() 能够返回fragment是否可见状态。 io
(2)注意事项
<1>添加isPrepared参数。在系统调用onActivityCreated时设置为true,这时onCreateView方法已调用完毕(通常咱们在这方法里执行findviewbyid等方法),确保 onLazyLoad()方法不会报空指针异常。
<2>添加isLazyLoaded参数。确保ViewPager来回切换时BaseFragment的initData方法不会被重复调用,onLazyLoad在该Fragment的整个生命周期只调用一次,第一次调用onLazyLoad()方法后立刻执行 isLazyLoaded = true。
<3>getUserVisibleHint()会返回是否可见状态,这是fragment实现懒加载的关键,只有fragment 可见才会调用onLazyLoad() 加载数据。
(3)demo