`

【转】android-性能优化之ViewStub惰性装载

 
阅读更多

本文截选自《Android开发权威指南》

      在4.5.6节介绍过一个<include>标签,该标签可以在布局文件中引用另外一个布局文件,并可以覆盖被引用布局文件根节点所有与布局相关的属性,也就是以android:layout开头的属性。通过<include>标签可以将一个非常庞大的布局文件分解成若干个较小的布局文件,而且这些小的布局文件也可以被多次引用,从而达到一个重用的目的。

     <include>标签固然很好用,但有一个问题,就是布局文件中的控件并不一定在程序启动时全都用到,有一些控件只在特定的情况下才会被使用到。例如,一个阅读图书的软件只有在下载电子书时才需要显示进度条,在平时看书时都是装载的本地电子书,并不需要使用进度条。因此,在程序启动时完全可以先不加载这个进度条。但使用<include>标签引用这个包含进度条的布局文件时,不管三七二十一,将所有的控件全部装载到了内存中。也许有的读者会说,一个进度条占用不了多少系统资源,都装载也无所谓。这些读者也许是对的,但如果装载的不是进度条,而是很多ImageView控件(显示了很大的图像),并且还不是在一个地方装载,那恐怕就会将可怜的手机资源消耗殆尽了。因此,我们急需一种机制来改变<include>标签的这种行为,只在需要时装载控件。这种机制就是本节要介绍的ViewStub控件。

ViewStub是不可视的控件,它的作用与<include>标签基本相同,在布局文件中使用<ViewStub>标签来引用其他的布局文件。但与<include>唯一的不同是ViewStub并不会马上装载引用的布局文件。只有在调用了ViewStub.inflate或ViewStub.setVisibility(View.VISIBLE)方法后,ViewStub才会装载引用的控件,下面先看两个布局文件。

main.xml

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   android:orientation="vertical"android:layout_width="fill_parent"

   android:layout_height="fill_parent">

   <Button android:layout_width="fill_parent"

       android:layout_height="wrap_content" android:text="我的按钮"

       android:onClick="onClick_Button" />

    <includelayout="@layout/custom" />

</LinearLayout>

custom.xml

<?xml version="1.0"encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

          android:orientation="vertical"android:layout_width="fill_parent"

          android:layout_height="fill_parent">

              <Buttonandroid:layout_width="fill_parent"

                      android:layout_height="wrap_content" an  droid:text="按钮1" />

              <Buttonandroid:layout_width="fill_parent"

                      android:layout_height="wrap_content" android:text="按钮2" />

</LinearLayout>

       在main.xml文件中使用了<include>标签来引用custom.xml,在这种情况下,屏幕上会立即显示三个如图5.56所示的按钮。如果将<include>标签换成如下的代码,在程序启动时,只会显示在main.xml文件中的定义按钮,如图5.57所示。

<ViewStub android:id="@+id/viewstub"android:inflatedId="@+id/button_layout"

   android:layout="@layout/custom"android:layout_width="fill_parent"

   android:layout_height="wrap_content"  />
\"><br>              图5.56  使用<include>标签装载控件 <br><br><img style=

    }

}

单击“我的按钮”后,会显示在custom.xml文件中定义的两个按钮,效果与图5.56完全一样。

   注意:<ViewStub>与<include>标签一样,也可以设置所引用布局文件中根节点所有与布局相关的属性。所不同的是<include>标签的android:id属性直接覆盖了所引用布局文件中根节点的android:id属性值,而<ViewStub>标签的android:id属性与普通控件标签的android:id属性一样,用于在代码中引用控件。在<ViewStub>标签中需要使用android:inflatedId属性覆盖所引用布局文件中根节点的android:id属性值。虽然<ViewStub>可完全取代<include>,但唯一的不足是<ViewStub>目前还无法取代<merge>

 

 

转自:http://www.2cto.com/kf/201110/108620.html

分享到:
评论

相关推荐

    Android UI优化之ViewStub标签的使用

    在动态加载的布局中,可以结合`merge`标签来避免不必要的父布局,进一步优化性能。 ```xml &lt;merge xmlns:android="http://schemas.android.com/apk/res/android"&gt; &lt;!-- 动态加载的视图内容 --&gt; ``` 在使用...

    Android代码-RxJava封装的ViewStub。使用方式与RxBinding相似。

    But the ViewStub is an invisible and zero-sized view that can be used to lazy loading on demand. Similarly, with reduce memory usage, use ViewStub can also speed up rendering by loading the views ...

    Android开发技巧之ViewStub控件惰性装载

    ViewStub的设计理念是实现控件的惰性装载,即在需要时才加载和初始化视图,而不是在应用启动时一次性加载所有布局。这在处理大型布局或者有多个可选组件的情况下尤其重要。 在传统的布局文件中,如使用标签,会将被...

    Android布局优化之ViewStub控件

    ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View。虽然Android开发人员基本上都听说过,但是真正用的可能不多。 ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及...

    android-collapse-calendar-view-Android.zip

    综上所述,"android-collapse-calendar-view-Android"控件展示了Android UI设计和动画实现的深度,涵盖了视图状态管理、动画效果、布局设计、性能优化等多个方面。对于任何希望提升其Android应用界面交互体验的...

    android应用性能优化最佳实践

    在Android应用开发中,性能优化是一项至关重要的任务,它直接影响到用户的体验和应用的市场竞争力。本文将深入探讨一些Android应用性能优化的最佳实践,主要基于Java编程语言。 1. **内存管理** - **避免内存泄漏*...

    android-Ultra-Pull-To-Refresh

    此外,为了优化性能,框架内部采用了一些优化策略,比如使用ViewStub延迟加载刷新头部和加载更多尾部视图,减少初始化时的内存消耗;通过计算实际滑动距离和阈值,避免不必要的刷新动作,提高用户体验。 总结来说,...

    DataBinding中ViewStub例子

    在DataBinding中使用ViewStub,首先需要在XML布局文件中定义ViewStub,并设置`android:layout`属性来指定要加载的子布局资源。例如: ```xml &lt;layout xmlns:android="http://schemas.android.com/apk/res/android"&gt;...

    android应用性能优化最佳实践读书笔记

    在Android应用开发中,性能优化是一项至关重要的任务,它直接影响到用户的体验和应用程序的市场竞争力。"Android应用性能优化最佳实践"这本书深入探讨了如何提升Android应用的性能,以下是一些核心知识点的总结: 1...

    Android下使用ViewStub控件加载

    在Android开发中,ViewStub是一个轻量级的控件,常用于实现动态加载和延迟加载。这个控件在默认情况下不占用布局空间,且不可见。...通过合理使用ViewStub,开发者可以优化应用的性能,同时提供更流畅的用户体验。

    面试Android性能优化

    在Android开发领域,性能优化是每个专业开发者必备的技能,特别是在面试环节,这一主题更是备受关注。本专题将深入探讨Android性能优化的关键知识点,帮助开发者提升应用的运行效率和用户体验。 首先,我们要理解...

    ListView之ViewStub的使用

    在ListView中巧妙地使用ViewStub,可以实现一些动态加载或优化性能的需求。本文将深入探讨如何在ListView中应用ViewStub。 1. **ViewStub基本概念** - ViewStub是一个特殊的轻量级视图,初始状态是不可见的,不...

    Android----窗口背景&UI性能

    这篇博客“Android----窗口背景&UI性能”很可能深入探讨了Android系统如何处理窗口背景以及如何优化UI性能,使得应用运行更加流畅、美观。 窗口背景在Android中主要指的是Activity或Window的背景,它可以通过设置...

    第三章 Android开发 使用ViewStub延迟展开视图.docx

    在Android开发中,ViewStub是一...总之,ViewStub是Android开发中一种高效的工具,用于延迟加载视图,优化性能,特别是对于那些非必需且可能占用大量内存的视图。正确使用ViewStub,可以提高应用的用户体验和整体性能。

    惰性控件ViewStub实现布局东动态加载

    ViewStub是Android开发中一种特殊的轻量级控件,它在布局文件中占用的空间为0,不会参与初始化时的视图构建,直到被显式地`inflate`或设置了`android:layout_width`和`android:layout_height`属性后才会被加载。...

    Android ViewStub 页面状态动态切换

    在Android开发中,ViewStub是一个轻量级的组件,它在布局文件中占用的空间为0,不会参与初始化时的视图加载。ViewStub通常用于延迟加载或者动态插入视图,尤其适用于实现页面状态的动态切换,如空状态、错误状态、...

    ViewStub的使用简单示例

    4. **优化性能**: 使用ViewStub可以提高应用的性能,因为它允许你只在需要时才加载和初始化额外的视图,减少了内存消耗和UI渲染时间。 5. **注意点**: - ViewStub加载的布局不能包含根节点,否则会导致运行时...

    android应用性能优化.rar

    在Android应用开发中,性能优化是一项至关重要的任务,它直接影响到用户的体验和应用程序的市场竞争力。"android应用性能优化.rar"这个压缩包可能包含了关于如何提升Android应用性能的各种最佳实践和指南。以下是...

Global site tag (gtag.js) - Google Analytics