安卓优化方案之片段的懒加载实现代码

  

  

在Android应用中,:viewpage是我们不可避免使用的一个控件,因为它可以使我们在占用较少空间的同时,增强内容的丰富性,同时以其内部流淌着谷歌的血液,所以它几乎成了每一个应用的标配控件。但是,假如:viewpage的每一个片段都需要通过网络拉取数据加载,而:viewpage是默认加载前两项的,所以在很容易造成网络丢包或者网络堵塞等问题,所以片段使用懒加载是非常有必要的。

  

举个栗子:

  

安卓优化方案之片段的懒加载实现代码

  

如上图所示,我们有两个大的标签:人物和风景。而人物选项卡下有三个选项卡:美女,帅哥,萌娃三个选项卡,风景选项卡下有:北京,香港,上海三个选项卡。假如当应用刚启动时,执行的生命周期如下:

  

安卓优化方案之片段的懒加载实现代码

  

我们可以看的到,应用程序会默认加载美女和帅哥两个片段,并且它们的生命周期都执行到安吉星()方法,同时加载两个片段,假如我们在片段加载的时候拉取网络数据,那么就会造成如上所说的网络丢包或者网络堵塞等问题,所以我们为了避免这个问题,就需要实现片段的懒加载,当我们对片段可见的时候,再进行网络加载数据。

  

  

针对背景讨论的问题,我们最终要实现的目标就是,当片段对我们可见时,我们才进行网络加载,然后再解析数据,更新UI。针对上面的演示,我们需要做到如下效果:

  

安卓优化方案之片段的懒加载实现代码

  

要实现起来其实也并不复杂,在片段中有一个<代码> setUserVisibleHint 这个方法,而且这个方法是优于onCreate()方法的,所以也可以作为片段的一个生命周期来看待,它会通过isVisibleToUser告诉我们当前片段我们是否可见,我们可以在可见的时候再进行网络加载。

        公共空间setUserVisibleHint(布尔isVisibleToUser)      

当我们在<代码> setUserVisibleHint 方法中进行日志输出时,我们可以看到:

  

安卓优化方案之片段的懒加载实现代码

  

只有可见时,我们isVisibleToUser为真的,否则为假,所以我们可以重写<代码> setUserVisibleHint 方法,然后在可见时进行网络加载数据:

        @Override   公共空间setUserVisibleHint(布尔isVisibleToUser) {   日志。d(“标签”,mTagName +”setUserVisibleHint()——比;isVisibleToUser=" + isVisibleToUser);      如果(isVisibleToUser) {   pullData ();   }   super.setUserVisibleHint (isVisibleToUser);   }      

  

由第二部分我们可以知道,<代码> setUserVisibleHint(布尔isVisibleToUser) 方法是比<代码> onCreate> getUserVisibleHint()>         @Override   公共空间onStart () {   super.onStart ();   日志。d(“标签”,mTagName + onStart ());   …   如果(getUserVisibleHint ()) {   pullData ();   }   }      

当然,如果你的网络请求并不需要涉及界面更新,那么就可以直接在<代码> setUserVisibleHint(布尔isVisibleToUser) 里操作,所以最终还是要根据各自的实际用途来使用。

  

最后,附上懒加载的演示:Github/LazyFragment

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

安卓优化方案之片段的懒加载实现代码