Android 优化布局层次结构
前面介绍过使用HierarchyViewer和Android lint来优化我们的程序,这一篇算是总结性的,借助一个小例子来说用怎么优化应用布局。这个例子是android官网给出的,作者也当一把翻译。
多数开发者可能会这样认为,使用基本的布局结构会产生高效的布局性能,其实这个想法是不完全正确的。我们每一个添加到应用的控件和布局,都需要初始化、布局、绘制,这些多是需要时间降低显示速度的。另外,嵌套多个使用layout_weight属性的LinearLayout实例会花费更大的代价,因为每一个子布局都要测量两次。如果这种布局使用在ListView或者GridView中,渲染时会更耗时。
下面,我们根据一个布局示例使用HierarchyViewer和Android lint来检测优化布局结构。
使用HierchyViewer
HierchyViewer需要你选择一个已连接的设备或者模拟器中的一个运行的程序,显示出布局的树结构。每个块上的红绿灯代表它的测量,布局,以及绘图性能,帮助你找出潜在的问题。有读者在读完《Android UI 优化——使用HierarchyViewer工具》后提出HierarchyViewer没有显示出红绿黄灯和时间,这怎么解决。在tool目录启动HierarchyViewer确实没有相应的设置去显示,但是可以在eclipse中启动HierarchyViewer去设置。Window->Open Perspective->others->hierarchyviewer。在Tree View点击三个圆圈的按钮,如图一:
图一
图一图二给出了显示绘制时间和不显示绘制时间的区别:
图二 图三
我们开始分析一个ListView的item布局,如图四,这个布局的左边显示了一幅图片,两个文字item放在右边。当布局被重复加载的时优化显得尤为重要。
图四
图四的布局文件在HierarcheyViewer中显示的层次结构如图五,选中LinearLayout会显示各种性能参数,如图六:
图五 图六
在图五中显示视图有三层结构,并且有些显示了红灯黄灯,这就需要我们优化,图六中也显示了绘制时间。
上述布局性能较低的原因主要是由一个内嵌的LinearLayout所引起,为了提高性能,我们使用RelativeLayout,将该布局浅而广的扁平化结构代替为深而窄的树形结构,这样该布局变为一个2层的结构,修改后的布局结构如图七:
图七
此时,绘制时间减少了,并且去掉了红灯、黄灯显示。
使用lint
《Android代码优化——使用Android lint工具》简单说明了lint的使用,在布局文件内运行Lint工具,可以找出那些可能要优化的布局结构。Lint工具代替Layoutopt工具,并且有更大的功能。如下是Lint的一些示例:
1、Use compound drawables,在LineraLayout布局中包含一个ImageView和一个TextView,可以使用compound drawable代替,性能会更好。
2、Merge root frame,如果root布局是FrameLayout,可以使用<merge/>代替,具体可参考《Android抽象布局——include、merge 、ViewStub》。
3、Useless leaf,没有子布局的layout可以去掉
Useless parent ,一个布局不是ScrollView或者不是一个根布局,也没有背景,只有一个孩子节点,可以被删掉。
5、Deep layouts,布局若有太多内嵌,则性能很差。考虑使用RelativeLayout 以及GridLayout等扁平化布局代替。默认布局最大深度是10.
Android使用Lint请移步至《Android代码优化——使用Android lint工具》。
再说些题外话,希望路过的各位支持,博主有幸成为2013年度博客之星的候选人,期待你的一票,谢谢您的支持。
投票猛击:
http://vote.blog.csdn.net/blogstaritem/blogstar2013/xyz_lmn
Android 优化布局层次结构的更多相关文章
- 3.Android 优化布局(解决TextView布局)
转载:http://www.jianshu.com/p/d3027acf475a 今天分享一个Layout布局中的一个小技巧,希望看过之后你也可以写出性能更好的布局,我个人的目的是用最少的view写出 ...
- [整]Android开发优化-布局优化
优化布局层次结构 一个普遍的误解就是,使用基本的布局结构会产生高效的布局性能.然而每一个添加到应用的控件和布局,都需要初始化,布局位置和绘制.比如,使用一个嵌套的LinearLayout会导致过深的布 ...
- Android优化——UI优化(一)优化布局层次
优化布局层次 1.避免布局镶嵌过深(如下) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- 教你使用Android SDK布局优化工具layoutopt
创建好看的Android布局是个不小的挑战,当你花了数小时调整好它们适应多种设备后,你通常不想再重新调整,但笨重的嵌套布局效率往往非常低下,幸运的是,在Android SDK中有一个工具可以帮助你优化 ...
- Android中View绘制优化之一---- 优化布局层次
本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 前言,竟然是翻译,当然得弄的有板有眼. 照着大作家格式来咯 , - - . 译序 最近一直在做锁屏界面,之前也 ...
- 姿势摆好,一招学会android的布局优化!
作为android应用来讲,无论应用本身多么美观,功能多么强大,内容多么丰富.但如果App本身打开界面缓慢超过手机16ms刷新一次页面的时间,就会产生卡顿.用户体验都会变得极差,导致用户量减少.所以我 ...
- Android开发——布局性能优化的一些技巧(一)
0. 前言 上一篇我们分析了为什么LinearLayout会比RelativeLayout性能更高,意义在于分析了这两种布局的实现源码,算是对一个小结论的证明过程,但是对布局性能的优化效果,对这两种布 ...
- 【Android学习】Merge 优化布局
<merge />标签用于减少View树的层次来优化Android的布局 新建项目,不需要改动 运行后使用“DDMS -> Dump View Hierarchy for ...
- Android 性能优化---布局优化
Android 性能优化---布局优化 Android 布局绘制原理 布局加载过程 setContentView() --> inflate() -- > getLayout()(I/O操 ...
随机推荐
- vc个版本对应的vs版本
VC6VC7(2003)VC8(2005)VC9(2008)VC10(2010)VC11(2012)VC12(2013)VC14(2015)
- 搭建Java环境JDK,和运行环境JRE
1:想要学习Java第一步就是搭建Java环境,就是安装JDK,又因为JDK里面包含JRE,所以在安装JDK的过程中就安装了JRE,所以以下只是给出了JDK的安装包,自行下载安装即可 链接:http: ...
- Vue.js进阶
<!-- 动态Props --><!DOCTYPE html> <html lang='utf-8'> <head> <meta charset= ...
- Windows Server 安装 BitLocker
打开PowerShell(管理员): C:\> Install-WindowsFeature BitLocker -Restart 安装好后,系统会自动重新启动. Windows Server ...
- [原创]配置管理技术圈QQ群:129489184
[原创]配置管理技术圈QQ群:129489184 配置管理技术圈QQ群:129489184,研究cvs,svn,git,cc等平台配置技术,涉及版本控制,持续集成,自动化构建等! 欢迎各位同学来,来时 ...
- Cocos2dx.3x入门三部曲-Hello Game项目解析(三)
一.前提: 完成Hello Game项目的创建编译. 具体参考:Cocos2dx.3x_Hello Game项目创建篇 二.本篇目标: l 分析proj.win32工程的主要构成 l 分析proj ...
- 小白学数据分析----->付费用户生命周期研究
付费用户其实存在一个付费周期转化的问题,直接指标可能就是付费渗透率的问题,然而在此背后其实还有更深入的问题.我们经常遇到的是推广渠道获得的新用户,且这批用户进入游戏的状态.其实在付费用户问题研究方面, ...
- Intel® Threading Building Blocks (Intel® TBB) Developer Guide 中文 Parallelizing Data Flow and Dependence Graphs并行化data flow和依赖图
https://www.threadingbuildingblocks.org/docs/help/index.htm Parallelizing Data Flow and Dependency G ...
- ios面试总结-
一 C语言方法的知识 1: const static voilite 修辞变量各代表什么意思? const 修辞的变量为常量,常量是不容许修改. static 修辞的变量为静态变量,在内存中 ...
- Wireshark图解教程
Wireshark是世界上最流行的网络分析工具.这个强大的工具可以捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息.与很多其他网络工具一样,Wireshark也使用pcap network ...