Android中利用ViewStub实现Tab中TabContent的延迟加载

应用程序对各项资源的消耗(CPU, Memory, Battery and so on)是开发过程中一个非常重要的考虑因素,尤其是移动开发,这将直接决定应用程序运行的流畅与否。面对有限的资源,开发过程中必须合理利用。延迟加载可以在一定程度是缓解应用程序对资源(主要是内存)的消耗,提高其启动速度,尤其当应用程序比较大的时候,延迟加载的作用就更大了。依本人的了解,简单的说,延迟加载就是不必在程序初始化的时候就去加载所需的所有资源,而是将对资源的加载时间延迟到当程序真正需要该资源的时候。

Android中我们可以利用ViewStub来实现layout资源的延迟加载,至于ViewStub是什么,请参考Android Reference。一个很常见的情况就是在实现Tab布局时,我们可以让每个Tab页面对layout资源的加载延迟到用户点击该Tab时,这样显然节省了程序启动时对资源的消耗,加快其启动速度。具体的做法(当然不是唯一的),可以让Activity实现TabContentFactory接口,实现接口中定义的方法createTabContent,在该方法中构造所需的View,该方法只在每个Tab第一次显示时才调用,再次显示该Tab就不会再次调用。有一点需要注意,createTabContent是在Tab页面内容没有完全创建前调用的,因此在createTabContent里面是不能调用getCurrentTabView等之类的函数的。关键代码如下:

public View createTabContent(String tag) {
    ViewStub viewStub = null;
    if(tag.equals("tab1")) {
        viewStub = (ViewStub)findViewById(R.id.tab1);
        //必须显示调用setLayoutResource方法,即使你在layout资源定义的xml文件中已经设置了ViewStub的layout属性,否则运行时会报错,这一点本人也一直没明白原因。
        viewStub.setLayoutResource(R.layout.tab1);
    }
    return viewStub.inflate();
}

6条评论

  1. 看了,有点自己的想法,想切磋切磋!

  2. www.jvdian.com说道:

    没有白看,还是有收获的,好!

  3. 笑话据点说道:

    博客手机访问地址是什么?

  4. 三无屌丝说道:

    三无屌丝路过,博客不错呵

  5. 三五笑话说道:

    新年马上到了,提前祝新年快乐,博客越办越好!

留下评论