Android 使用ViewStub优化布局

在Android开发的工作学习中,我们往往会遇到一个比较复杂的页面,如一件商品的详情页,如天猫商城,一件商品的价格,图文介绍,秒杀活动,商品用户评价等,而且这些数据往往不是一个接口下发的,我们常规的处理是:

  1. 先将所有的view设为Gone,当后台接口调用成功后,在callback里面设置view的属性,并设为Visiable。
  2. 所有的接口异步并行调用。

这样的处理,也没有什么大问题,不过我们还可以做的更好,即使用ViewStub。

通俗的说,ViewStub是一个轻量级的view,可以使用它代替一个layout布局,当activity的根布局被infalter的时候,被ViewStub代替的子布局不会被解析,直到我们设置ViewStub为visiable 或者 调用ViewStub 的inflate()方法。

这是主布局的xml代码。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.firstapp.MainActivity"
    android:orientation="vertical"
    tools:ignore="MergeRootFrame" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <ViewStub
        android:id="@+id/viewstub"
        android:layout="@layout/view_stub_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</LinearLayout>

这是被ViewStub代替的布局xml代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <RatingBar
        android:id="@+id/ratingBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="RadioButton" />

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="RadioButton" />
    </RadioGroup>

</LinearLayout>

下面是activity里面的实例代码,很简单,不多赘言。

	ViewStub mViewStub;
	TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mViewStub = (ViewStub) this.findViewById(R.id.viewstub);
        mViewStub.setVisibility(View.VISIBLE);

        mTextView = (TextView) this.findViewById(R.id.textView1);
        mTextView.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				mViewStub.setVisibility(mViewStub.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
			}
		});

    }

总结:

  1. ViewStub可以优化布局的显示,适用于需要延迟加载的布局。
  2. ViewStub被显示之后,不可以再次使用ViewStub对象来显影被ViewStub代替的布局,我在上面的textview点击事件中做了演示,大家自行测试。
  3. 当一个页面需要调用多个接口时,我认为使用异步串行调用,用户体验更好,一步步显示需要加载的数据。

今天就到这吧,第一次写文章,大家将就看吧,我会加油的。

时间: 2024-10-17 17:32:13

Android 使用ViewStub优化布局的相关文章

【Android 开发技巧】布局优化利器&lt;include/&gt;和ViewStub

『原创作品,转载请注明出处. --- 孙国威』 [文章原始地址 http://blog.csdn.net/manoel/article/details/39036507] 当创建复杂的布局的时候,有时候会发现添加了很多的ViewGroup和View.随之而来的问题是View树的层次越来越深,应用也变的越来越慢,因为UI渲染是非常耗时的. 这时候就应该进行布局优化了.这里介绍两种方式,分别为<include>标签和ViewStub类. <include/> 使用<include

Android App性能优化(一)之布局优化

当创建复杂布局的时候,我们会在xml 文件中添加大量的ViewGroup和View.伴随着每次迭代,View树的层次越来越深,界面加载速度越来越慢,消耗的内存也越来越多.当您的程序出现加载时短暂黑屏或横竖切换时短暂黑屏,抑或如内存溢出(OOM)之类的问题时,没准您的程序需要优化了. 那么如何让程序运行速度更快?响应更敏捷?优化布局是一个最基本的方法,本文将介绍最基本的优化布局方法. 1.使用ViewStub实现View的延迟加载. 很多情况下,xml布局文件中的部分View初始状态是设置为不显示

android应用程序优化之布局优化

在我们开发APP时不仅要在代码实现上.做到对App的优化,而在我们的界面布局也有很多要优化的地方,假设布局写的非常low的话,系统载入布局的速度会十分的慢,使得用户的体验非常的不好.这篇文章主要是从我平时对布局的优化方面总结一下,我觉得常常能够用到的布局优化方面的一些技巧和手段. 1.降低布局的嵌套.这一点也是最重要的 搞android的都知道,android的整个UI布局文件最后也是要一层一层的解析成View对象的,假设层次太深的话,对导致递归的层次太深而极大的影响解析速度,所以,我们一定不能

Android最佳性能实践(四)——布局优化技巧

在前面几篇文章当中,我们学习了如何通过合理管理内存,以及高性能编码技巧的方式来提升应用程序的性能.然而实际上界面布局也会对应用程序的性能产生比较大的影响,如果布局写得糟糕的话,那么程序加载UI的速度就会非常慢,从而造成不好的用户体验.那么本篇文章我们就来学习一下,如何通过优化布局来提供应用程序的性能.还没有看过前面前面一篇文章的朋友建议可以先去阅读 Android最佳性能实践(三)——高性能编码优化 . 重用布局文件 Android系统中已经提供了非常多好用的控件,这让我们在编写布局的时候可以很

Android性能优化-布局优化

在上一篇博客中,我和大家一起探讨了在Android中对SQLite数据库的操作优化细节.还没有看的点击这里:Android性能优化-SQLite数据库 今天,我们继续Android性能优化系列 - 布局优化.在Android中,UI布局作为展示性的标志,显示的速度直接体现了一个App对于客户直观的影响.一个好的App,在布局和UI上肯定有比较好的性能优化,所以布局优化成为了Android性能优化的有一个重点. Android中关于布局优化,系统为我们提供了几个抽象的标签: (1)include

Android优化——UI优化(一)优化布局层次

优化布局层次 1.避免布局镶嵌过深(如下) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&quo

Android app性能优化解决卡慢顿之布局优化

前面博客分析了导致app卡顿慢的直接原因,这里就从原因出发,分析一些优化方案(这里主要是从直接影响渲染机制的布局相关进行分析) 1) Invalidations, Layouts, and Performance(动画,布局的优化) 顺滑精妙的动画是app设计里面最重要的元素之一,这些动画能够显著提升用户体验.下面会讲解Android系统是如何处理UI组件的更新操作的. 通常来说,Android需要把XML布局文件转换成GPU能够识别并绘制的对象.这个操作是在DisplayList的帮助下完成的

Android app性能优化大汇总之内存性能优化

写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在Android开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). 内存简介: RAM(random access memory)随机存取存储器.说白了就是内存. 一般Java在内存分配时会涉及到以下区域: 寄存器(R

Android开发性能优化总结(一)

安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. 应用程序的性能问题体现在很多方面, 比如第一次启动速度慢,或者进入某一界面速度慢:动画执行过程不流畅,或者动画执行卡顿时间长:ListView列表滑动过程中卡顿,不流畅:应用程序自定义的某特定界面执行速度慢:响应某一用户事件时长时间无响应(ANR):操作数据库时,执行大量数据的增删改查操作,执行速度