Best Practices for Performance_3.Improving Layout Performance 优化布局
http://developer.android.com/training/improving-layouts/index.html
1. 优化布局层次
1) 每增加一个View或者布局,都会增加额外的 “初始化-布局-重绘” 的时间。 LinearLayout 嵌套会导致层次较多,特别是如果设置了 layout_weight 属性时,效率会很低,因为每个子View都会measure两次。这在View需要重复创建,比如ListView或者Gridview中影响会比较明显。可以用RelativeLayout来减少层次。
浅而宽的层次好过窄而深的层次。最大层次最好不要超过10层。
2) 使用hierarchyviewer 分析和优化布局效率
目录: <sdk>/tools/hierarchyviewer
Load View Hierarchy -> 加载一个界面的布局树
选中一个元素,会显示其 Measure、Layout、Draw 三个过程的时间,三个红绿灯的颜色代表前面三个过程的效率。
3)使用 Lint 来优化布局。
在 ADT 16+ 的版本上已经集成了 Lint 工具,Eclipse工具栏上有相应的图标。它会给出很多优化的建议。
目录: <sdk>/tools/lint.bat
旧版本中使用的是 layoutopt 工具。
2. 使用 <include/>、<merge/>标签
1)使用<include/>复用布局
<include layout="@layout/titlebar"/>
可以重新指定布局的属性:
<include android:id=”@+id/news_title”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
layout=”@layout/titlebar”/>
但是要让重新指定的布局属性起作用,必须同时指定 layout_width 和 layout_height 属性。
2) include 布局的时候,某些情况下使用<merge/>标签,可以减少一层布局。
3. 使用 ViewStub 来延迟布局加载
某些View或者布局很少用到,可以在需要的时候才加载,以便减少内存使用,提高绘制效率。
ViewStub 是很轻量级的View,没有尺寸,不会绘制,布局inflate的时候也不消耗什么性能。
eg:
<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" />
在需要使用该View的时候:
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// 或者
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
ViewStub 一旦 visible/inflated 后它就不在有效,被替换成 layout指定的布局,其id也失效。
新布局的id是 inflatedId 指定的。
ViewStub 现在不支持 <merge/> 标签。
4. 让ListView滑动顺畅
1)关键是把耗时操作放到工作线程中,不要放在UI线程。
2)使用ViewHolder
Best Practices for Performance_3.Improving Layout Performance 优化布局的更多相关文章
- PLSQL_性能优化工具系列17_Best Practices: Proactive Data Collection for Performance Issues
占位符 https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=2082062510193540&id=1366133. ...
- Android 性能优化(4)Optimizing Layout Hierarchies:用Hierarchy Viewer和Layoutopt优化布局
Optimizing Layout Hierarchies This lesson teaches you to Inspect Your Layout Revise Your Layout Use ...
- Android 优化布局层次结构
前面介绍过使用HierarchyViewer和Android lint来优化我们的程序,这一篇算是总结性的,借助一个小例子来说用怎么优化应用布局.这个例子是android官网给出的,作者也当一把翻译. ...
- Android中View绘制优化之一---- 优化布局层次
本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 前言,竟然是翻译,当然得弄的有板有眼. 照着大作家格式来咯 , - - . 译序 最近一直在做锁屏界面,之前也 ...
- [整]Android开发优化-布局优化
优化布局层次结构 一个普遍的误解就是,使用基本的布局结构会产生高效的布局性能.然而每一个添加到应用的控件和布局,都需要初始化,布局位置和绘制.比如,使用一个嵌套的LinearLayout会导致过深的布 ...
- Android 性能优化---布局优化
Android 性能优化---布局优化 Android 布局绘制原理 布局加载过程 setContentView() --> inflate() -- > getLayout()(I/O操 ...
- Android Studio分类整理res/Layout中的布局文件(创建子目录)
res/layout中的布局文件太杂,没有层次感,受不了的我治好想办法解决这个问题. 前几天看博客说可以使用插件分组,可惜我没找到.知道看到另一篇博客时,才知道这个方法不能用了. 不能用插件,那就手动 ...
- Android优化——UI优化(一)优化布局层次
优化布局层次 1.避免布局镶嵌过深(如下) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- android 分区layout以及虚拟内存布局-小结
摘要 简述启动过程的内存分配,各个映像的烧写,加载,logo的刷新,文件系统mount. DRAM:外部RAM: ISRAM:内部RAM(128K),(PL会跑在ISRAM里面,去初始化DRAM,lo ...
随机推荐
- BZOJ 4518 征途
斜率优化.又是变量名打错看了老半天. 把方差式子展开一下就好了. #include<iostream> #include<cstdio> #include<cstring ...
- IBM Domino 9 出现 Server Controller 未在主机上运行或未在端口2050监听 解决方案
如果在网上搜索的方法,比如防火墙开端口还没有解决的话,那么我的解决方案可能会解决你的问题. 出现的场景: 我先装了Notes,Designer,后装Domino Server, 配置Domino服务器 ...
- Python-Day3知识点——深浅拷贝、函数基本定义、内置函数
一.深浅拷贝 import copy #浅拷贝 n1={'k1':'wu','k2':123,'k3':['carl',852]} n2=n1 n3=copy.copy(n1) print(id(n1 ...
- C++ list size()所想到的事情
effective STL 某个Item里重点提出了 list.size()是一个O(n)的效率 当时只是记下来了 后面看了csdn有人在实际工程上遇到坑了 我近来闲来无事 把STL的lis ...
- 从一个数组中提取出第start位到第end位
假设通过数组in来表示一个很大的数(in[0]表示最低bit),提取该数的第start位到第end位(计数起始位为0): #define MAX_BYTE_LEN ( 48 ) int getData ...
- Java的数组长度无需编译指定,因为它是对象
大家可以看从Thinking in Java中摘出来的代码理解一下,甚至.多维数组的子数组无须等长 //: MultiDimArray.java// Creating multidimensional ...
- Java实验五
20145113 Java实验五 网络编程及安全 实验内容 对于客户端与服务器端:修改原代码,使其可以实现连续的传消息,并且传送文件. 对于加解密部分: 对于原先的加密只加密"hello w ...
- TableView分割线从顶端开始
如果什么都不设置的话 分割线是从cell.textlabel处开始的 如果加上 [_myTableView setSeparatorInset:UIEdgeInsetsMake(0, 0, 0, 0) ...
- 转:Task任务调度实现生产者消费者模式 (个人理解后文)
纯属个人愚见.欢迎加入反驳(PiDou). 1.前文大致就是,利用Queue配置的一个TaskFactory任务调度器.实现生产者消费者模式的例子..首先我就试了 第一种 FIFO(先进先出)的配置. ...
- 关于C语言的问卷调查(补交)
你对自己的未来有什么规划?做了哪些准备?(还是处于比较迷茫的状态:我做的准备是吧自己对计算机的兴趣提起来!) 你认为什么是学习?学习有什么用?现在学习动力如何?为什么?(学习就是学自己不会的东西:增加 ...