资讯专栏INFORMATION COLUMN

【Android开发技巧】在Activity页面中如何实现Fragment数据的缓加载

big_cat / 1778人阅读

摘要:简述渐渐的在开发道路上更注重的性能,数据的预加载的处理。那如何才能更好的处理这个问题呢那就需要我们开发人员自定义实现数据的缓加载。在这里实现数据的缓加载在,我增加了三个方法,一个是,即被设置为可见时调用,一个是,即被设置为不可见时调用。

简述:

渐渐的在开发道路上更注重App的性能, 数据的预加载的处理。在日常开发APP,一个Activity里面有可能会是有Viewpager与多个Fragment来进行组合,而如果每个Fragment都需要通过网络加载数据,或加载本地缓存。 如果当前Activity创建的时候就需要初始化大量的资源,需要网络加载,从服务器loding。这样的结果,我们也不会同意。那如何才能更好的处理这个问题呢? 那就需要我们开发人员自定义实现Fragment数据的缓加载。

答案:在Fragment里的setUserVisibleHint这个方法里

该方法用于告诉系统,这个Fragment的UI是否是可见的。所以我们只需要继承Fragment并重写该方法,即可实现在fragment可见时才进行数据加载操作,即Fragment的懒加载。

public abstract class LazyFragment extends Fragment {

protected boolean isVisible;  
/** 
 * 在这里实现Fragment数据的缓加载. 
 * @param isVisibleToUser 
 */  
@Override  
public void setUserVisibleHint(boolean isVisibleToUser) {  
    super.setUserVisibleHint(isVisibleToUser);  
    if(getUserVisibleHint()) {  
        isVisible = true;  
        onVisible();  
    } else {  
        isVisible = false;  
        onInvisible();  
    }  
}  

protected void onVisible(){  
    lazyLoad();  
}  

protected abstract void lazyLoad();  

protected void onInvisible(){}  

}

在LazyFragment,我增加了三个方法,一个是onVisiable,即fragment被设置为可见时调用,一个是onInvisible,即fragment被设置为不可见时调用。另外再写了一个lazyLoad的抽象方法,该方法在onVisible里面调用。你可能会想,为什么不在getUserVisibleHint里面就直接调用呢?

我这么写是为了代码的复用。因为在fragment中,我们还需要创建视图(onCreateView()方法),可能还需要在它不可见时就进行其他小量的初始化操作(比如初始化需要通过AIDL调用的远程服务)等。而setUserVisibleHint是在onCreateView之前调用的,那么在视图未初始化的时候,在lazyLoad当中就使用的话,就会有空指针的异常。而把lazyLoad抽离成一个方法,那么它的子类就可以这样做:

public class OpenResultFragment extends LazyFragment{

// 标志位,标志已经初始化完成。  
private boolean isPrepared;  

@Override  
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
    Log.d(LOG_TAG, "onCreateView");  
    View view = inflater.inflate(R.layout.fragment_open_result, container, false);  
    //XXX初始化view的各控件  
isPrepared = true;  
    lazyLoad();  
    return view;  
}  

@Override  
protected void lazyLoad() {  
    if(!isPrepared || !isVisible) {  
        return;  
    }  
    //填充各控件的数据  
}  

}
在上面的类当中,我们增加了一个标志位isPrepared,用于标志是否初始化完成。然后在我们所需要的初始化操作完成之后调用,如上面的例子当中,在初始化view之后,设置 isPrepared为true,同时调用lazyLoad()方法。而在lazyLoad()当中,判断isPrepared和isVisible只要有一个不为true就不往下执行。也就是仅当初始化完成,并且可见的时候才继续加载,这样的避免了未初始化完成就使用而带来的问题。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/14814.html

相关文章

  • Android开发技巧Activity页面如何实现Fragment数据的缓加载

    摘要:简述渐渐的在开发道路上更注重的性能,数据的预加载的处理。那如何才能更好的处理这个问题呢那就需要我们开发人员自定义实现数据的缓加载。在这里实现数据的缓加载在,我增加了三个方法,一个是,即被设置为可见时调用,一个是,即被设置为不可见时调用。 简述: 渐渐的在开发道路上更注重App的性能, 数据的预加载的处理。在日常开发APP,一个Activity里面有可能会是有Viewpager与多个Fr...

    lwx12525 评论0 收藏0
  • 玩转Android- 收藏集 - 掘金

    摘要:附各种权限详细处理掘金前言对于运行时权限的处理方式网上有很多,包括注解,等等。进阶篇显示网页详解掘金概述是用于显示网页的控件。经过调查复杂列表的实现掘金控件从发布以来,目前已经普遍用于项目中,来承载各种列表内容。 美团点评前端无痕埋点实践 - 前端 - 掘金构建一个数据平台,大体上包括数据采集、数据上报、数据存储、数据计算以及数据可视化展示等几个重要的环节。其中,数据采集与上报是整个流...

    Jonathan Shieber 评论0 收藏0
  • 如何使用Android UI Fragment开发“列表-详情”界面

    摘要:在内获取返回结果有自己的和,但却不具有方法,但可以先取得托管它的,然后再返回数据。整理自安卓权威编程指南第章章。你可以从这里获取源码版权声明如何使用开发列表详情界面由在年月日写作。 在移动App里,有几种常见的界面形式: 手机上:一个列表界面A,点击某个条目后进入详情界面B,左右滑动可以切换到上/下条的详情界面; 平板上:由于屏幕足够大,列表界面A和详情界面B可以同时显示在屏幕上,分...

    ormsf 评论0 收藏0
  • 01.Android之基础组件问题

    摘要:此时再次旋转屏幕时,该不会被系统杀死和重建,只会调用。因此可通过和来判断是否被重建,并取出数据进行恢复。但需要注意的是,在取出数据时一定要先判断是否为空。只有在进程不被掉,正常情况下才会执行方法。 目录介绍 1.0.0.1 说下Activity的生命周期?屏幕旋转时生命周期?异常条件会调用什么方法? 1.0.0.2 后台的Activity被系统回收怎么办?说一下onSaveInsta...

    iamyoung001 评论0 收藏0
  • 金三银四,2019大厂Android高级工程师面试题整理

    摘要:原文地址游客前言金三银四,很多同学心里大概都准备着年后找工作或者跳槽。最近有很多同学都在交流群里求大厂面试题。 最近整理了一波面试题,包括安卓JAVA方面的,目前大厂还是以安卓源码,算法,以及数据结构为主,有一些中小型公司也会问到混合开发的知识,至于我为什么倾向于混合开发,我的一句话就是走上编程之路,将来你要学不仅仅是这些,丰富自己方能与世接轨,做好全栈的装备。 原文地址:游客kutd...

    沈建明 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<