安卓性能优化之懒加载(Fragment中数据的懒加载)

一、背景:为何须要懒加载。  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 

懒加载fragment基类