[Android 性能优化系列]布局篇之动态加载布局

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢

转载请标明出处(http://blog.csdn.net/kifile),再次感谢

原文地址:http://developer.android.com/training/improving-layouts/loading-ondemand.html

在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家

性能优化布局篇:

[Android
性能优化系列]布局篇之减少你的界面层级

[Android
性能优化系列]布局篇之通过<include>复用布局

题外话:

很多时候我们都会在布局文件中加入一些不常使用的控件,但是我们又真的很少使用它们,但是它们在进行初始化的时候,一样会消耗我们的系统资源,因此我们应该考虑通过ViewStub来优化他,正如在内存篇中所说的那样,只在真正需要的时候使用它。

下面是本次的正文:

################

有时候,你的布局中会有一些比较复杂但是又很少用到的控件。不管他是消息详情,进度条还是未完成的提示信息,你都可以直到真正需要的时候再加载他们,以降低你的内存消耗,提升渲染效率。

定义一个ViewStub

ViewStub是一个没有任何尺寸的轻量级View,他不会在布局上绘制任何东西或者做其他的工作。这就意味着,初始化以及在布局层级中保留它只需要很少的花费。此外,请记住每一个ViewStub都需要包含一个android:layout属性来指明他将要显示布局

下面这个ViewStub制定了一个半透明的进度条,只有当应用中加入新的项时我们才能够被看到他:

<ViewStub
    android:id="@+id/stub_import"
    android:inflatedId="@+id/panel_import"
    android:layout="@layout/progress_overlay"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />

加载ViewStub的布局

当你想要加载ViewStub所指定的布局时,你可以选择性的使用setVisiblity(View.VISIBLE)或者调用inflate()方法。

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

注意:inflate()方法会返回初始化后的View,因此你不需要通过findViewById来查找这个View

一旦指定的布局显示出来或者说初始化完成,那么ViewStub元素就不再是布局层级中的一部分了,他会被所指定的布局所替换,而被指定布局的id则是在ViewStub的属性中通过android:inflatedId指定的(并且这个id仅当指定布局显示或者初始化完成后有效)

注意:ViewStub的一个缺点是,它不能够初始化<merge/>标签的布局文件

Ps:最近好懒且忙,所以一直没有更新东西。其实这篇文章半个月前都差不多翻译好了,但是觉得貌似很简单,就没有发出来,但想了想之后今天还是重新整理了一下文字,最终发了出来,布局篇本来应该还有一个关于ListView优化的部分,但是感觉大家其实一直都有用到,就直接在这个简单陈述一下他的思想就好了。ListView进行的优化主要在于getView时,布局的重用,以及使用ViewHolder保存需要使用的控件,避免每次使用时都要通过findViewById进行查找,详情我就不怎么说了,大家如果感兴趣,可以去官方地址看看:
http://developer.android.com/training/improving-layouts/smooth-scrolling.html 。所以呢,布局篇就到这里了,感谢大家的阅览。

时间: 2024-10-28 20:32:52

[Android 性能优化系列]布局篇之动态加载布局的相关文章

[Android 性能优化系列]布局篇之减少你的界面层级

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/improving-layouts/optimizing-layout.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 性能优化之布局篇: [Android 性能优化系列]布

[Android 性能优化系列]布局篇之通过&lt;include&gt;复用布局

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/improving-layouts/reusing-layouts.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 性能优化布局篇: [Android 性能优化系列]布局篇之

[Android 性能优化系列]内存之终极篇--降低你的内存消耗

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/articles/memory.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 建议大家在看本文之前先去我的博客看看 [Android 性能优化系列]内存之基础篇--Andr

[Android 性能优化系列]内存之基础篇--Android怎样管理内存

大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/articles/memory.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 以下是本次的正文: ################ 随机訪问存储器(Ram) 无论在哪种软件

Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手

图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降低了OOM发生的概率.然而,在图片加载方面我们是否可以就此放松警惕了呢? 开源图片加载库能为我们解决绝大部分有关图片的问题,然而并不是所有! 首先,图片从来源上可以分成三大类:网络图片.手机图片.APK资源图片.网络图片和手机图片都在图片加载库功能的覆盖范围内,基本上不用开发者太操心,但是APK资源

Android性能优化系列之apk瘦身

Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中,他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率会越低(因为竞品中,用户有更多机会选择那个体验最好,功能最多,性能最好,包最小的),所以apk的瘦身优化也很重要,本篇博客将讲述apk瘦身的相关内容. 包体分析 在Android Studio工具栏里,打开build–>Analyze APK, 选择要分析的APK包 可以看到占用空间的主要是代码.图

Android性能优化系列之App启动优化

Android性能优化系列之布局优化 Android性能优化系列之内存优化 Android性能优化系列之apk瘦身 应用的启动速度缓慢是我们在开发过程中常常会遇到的问题,比方启动缓慢导致的黑屏.白屏问题,本篇博客就将介绍App启动优化的相关知识. 应用的启动方式 通常来说,启动方式分为两种:冷启动和热启动. 1.冷启动:当启动应用时.后台没有该应用的进程.这时系统会又一次创建一个新的进程分配给该应用.这个启动方式就是冷启动. 冷启动由于系统会又一次创建一个新的进程分配给它.所以会先创建和初始化A

(二)Android性能优化系列---Improving Layout Performance(一)(转载自:http://xhmj12.iteye.com/blog/2064258)

Android性能优化系列---Improving Layout Performance(一) Layouts是Android应用里直接影响用户体验的一个关键部分.如果Layout设计的不好,可能导致你的应用大量的内存占用从而导致UI响应很慢.Android SDK提供了工具帮助你分析你的Layouts的性能问题.结合这个工具同时查看本文,你能实现滑动流畅.占用内存最小的用户界面. Use the <merge> Tag 某些时候,自定义可重用的布局包含了过多的层级标签,比如我们需要在Line

Android性能优化【终极篇】

1.http用gzip压缩,设置连接超时时间和响应超时时间 http请求按照业务需求,分为是否可以缓存和不可缓存,那么在无网络的环境中,仍然通过缓存的httpresponse浏览部分数据,实现离线阅读. 2.listview 性能优化 1).复用convertView 在getItemView中,判断convertView是否为空,如果不为空,可复用.如果couvertview中的view需要添加listerner,代码一定要在if(convertView==null){}之外. 2).异步加载