码迷,mamicode.com
首页 > 其他好文 > 详细

关于Fragment的懒加载问题

时间:2017-02-20 00:49:43      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:自己的   地址   9.png   images   googl   doc   时间   调试   问题   

  为了达到界面效果,我们有时需要使用到TabLayout+ViewPager的方式来布局界面,然而ViewPageradapter总是默认把与当前可见的fragment相邻的两个fragment给加载出来.一旦界面数据太多,信息量太大,往往造成资源过多消耗,界面卡顿,甚至会造成程序崩溃...这时,我们就需要使用到fragment的懒加载方式,即第一次看到的时候自动加载当前页面,相邻的fragment不再预加载.

  Google官网提供给我们setUserVisibleHint这个方法。(API地址:http://androiddoc.qiniudn.com/reference/android/app/Fragment.html#setUserVisibleHint(boolean) ),这个方法的调用时期:当前fragment对用户可见时调用.

那么,是否可以在setUserVisibleHint(boolean isVisibleToUser)里进行数据加载操作来实现懒加载呢?

可以是可以,如果你只是需要数据的懒加载的话,但如果你还有以下的需求,那么这种方式就不行了:

1、如果在Fragment可见时需要进行一些控件的操作,比如显示加载控件

2、如果还需要在Fragment从 ""可见" 到 "不可见”时进行一些操作的话,比如取消加载控件显示

经过调试,setUserVisibleHint()可能会在Fragment的生命周期之外被调用,也就是可能在view创建前就被调用,也可能在destroyView后被调用,所以如果涉及到一些控件的操作的话,可能会报 null 异常,因为控件还没初始化,或者已经摧毁了。

 基于这个基础,我们需要达到具体的效果是:预加载时只做轻量的初始化; 

第一次可见状态下才开始加载数;

                   ③在把生命周期拆成 “可见”与“不可见”状态

                   不被繁琐的生命周期拖延时间;

上代码了:技术分享

  技术分享

技术分享

 这样的话,一个Fragment懒加载的基类就写完了,只需要让自己的子Fragment继承就好了.

关于Fragment的懒加载问题

标签:自己的   地址   9.png   images   googl   doc   时间   调试   问题   

原文地址:http://www.cnblogs.com/fuyaozhishang/p/6417879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!