Android懒加载vs预加载------Viewpager+F

作者: 诡异的叶子 | 来源:发表于2018-06-25 11:40 被阅读96次

由于在最近的几个项目中,都遇到ViewPager+多个Fragment的加载需求,但是其中很多地方都需要大量的网络请求和图片加载,在用lint监测的情况下,内存真的是窜窜往上跑。所以,考虑在整个Activity和Fragement中做懒加载。

image

既然提到懒加载,在设计概念中就不得不提到两个加载方式--------懒加载和预加载。这里对两个加载方式做一个简要的介绍。

1.预加载

1.1预加载的理解

在加载时,预先将所有资源加载的方式

1.2 预加载的使用场景

需要追求运行效率的项目中,并且内存消耗率非常低的业务逻辑。用户可以体验非常极致的加载和刷新效果,使用预加载可以做到非常好的效果。

2.懒加载

2.1懒加载的理解

懒加载也就是延迟加载,所有资源只有在使用的时候才会加载。

2.2懒加载的使用场景

在加载时候需要大量网络请求或者消耗大量内存的操作的时候。比如说各种商城商品界面。这些页面图片数量多而且大,少说百来K,多则上兆。要是页面载入就一次性加载完毕。不仅用户需要很长的等待时间,甚至会在某些情况下出现OOM的情况。

3.懒加载VS预加载

两种方式的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器端和客户端内存有一定的缓解压力作用,预加载则会增加服务器和和客户端压力。但是两种方式都有各自实用的场景,根据不同的业务,做不同的选择。这里我们优先对懒加载使用最多的业务逻辑Viewpager+Fragment做研究

4.Viewpager+Fragment之性能优化

ViewPager+Fragment作为Android程序员常用的一个组合控件,在很多优秀的APP中我们可以常见到。但是很多开发者都会遇到内存消耗过高,及界面卡顿,甚至OOM的可能性。作为一个优秀的程序员,这是不能忍耐的。当然,楼主是遇到在车载系统的开发中(内存极小,处理器落后,GPU渲染效果极差,老大说成本原因)直接OOM.What fuck!!没办法,只能找办法解决了。

与网上大部分的大神,如鸿神,郭霖的方式不同,楼主采用在Fragment这个层次做控制.
首先,配置用于Viewpager专用的BaseFragment:

public abstract class BaseTabFragment extends Fragment {

    private boolean hasInit = false; // 是否已经初始化

    public boolean isHasInit() {

        return hasInit;

}

    public void setHasInit(boolean hasInit) {

        this.hasInit = hasInit;

}

    /**

* 刷新页面

*/

    public abstract void refreshPage();

}

其次,viewpager中的Fragment继承该类。在其中实现refreshPage()方法

public class MyFragment extends BaseTabFragment {
//other ....
  @Override
    public void refreshPage() {
        setHasInit(true);
       //TODO do something there
//...
    }
//...
}

最后,在Activity中再做控制,主要是对于hashInit属性的操作:



    @Override
    public void onPageScrollStateChanged(int state) {

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //第一个fragment需要预加载
        if (position == 0) {
            BaseTabFragment tabListFragment = fragmentList.get(position);
            if (!tabListFragment.isHasInit()) {
                tabListFragment.refreshPage();
                tabListFragment.setHasInit(true);
            }
        }

    }

    @Override
    public void onPageSelected(int position) {
        BaseTabFragment tabListFragment = fragmentList.get(position);
        //selected fragment没有加载过,进行加载
        if(!tabListFragment.isHasInit()){
            tabListFragment.refreshPage();
        }
       // 使自定义的tabView背景变色
        TabLayoutUtils.toggleTabColor(tabLayout, tabsTitle.length, position, this); 

    }

5.原理总结

楼主的懒加载方式在于,使用增加的判断是否加载的属性hasInit方法来判定是否加载。如果业务需要,更改为预加载,只需要在Activity中做控制即可

相关文章

  • Android懒加载vs预加载------Viewpager+F

    由于在最近的几个项目中,都遇到ViewPager+多个Fragment的加载需求,但是其中很多地方都需要大量的网络...

  • web优化之懒加载和预加载

    懒加载和预加载是常用的web优化的手段。所以我们首先应该明白什么是懒加载和预加载。懒加载:懒加载也加延迟加载,延迟...

  • JS

    JS 懒加载,预加载 概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加...

  • 图片懒加载

    懒加载与预加载的基本概念。 懒加载也叫延迟加载:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片。 预...

  • 懒加载和预加载

    懒加载和预加载 1. 懒加载 1. 什么是懒加载? 懒加载也就是延迟加载 当访问一个页面的时候,先把img元素或是...

  • Android 懒加载优化

    目录介绍 1.什么是懒加载1.1 什么是预加载1.2 懒加载介绍1.3 懒加载概括 2.实际应用中有哪些懒加载案例...

  • vue中图片预加载&懒加载

    简单解释 懒加载顾名思义,很懒,所以用到时才开始加载,不用不加载。 预加载,预,提前的意思。没用到时...

  • 微信程序项目边界

    详情头部标题省略加载{懒加载,预加载,无限加载,加载中} 常见路由切换

  • 懒加载、预加载、

    懒加载是什么: 能防止页面一次性向服务器响应大量请求导致服务器响应慢,页面卡顿或崩溃等问题是提到前端性能优化中图片...

  • 预加载 + 懒加载

    http://web.jobbole.com/85294/

网友评论

    本文标题:Android懒加载vs预加载------Viewpager+F

    本文链接:https://www.haomeiwen.com/subject/epaeyftx.html