有一个常见的错误看法:只使用基础的布局结构会生产高效的布局。然而,每个您程序中的每个控件和布局都需要初始化、布局位置、和绘制。例如使用嵌套的LinearLayout
可以导致很多的层次结构。更严重的是,如果在嵌套的LinearLayout
中使用layout_weight参数将会导致更加严重的性能问题,因为里面的控件在计算大小的时候会计算两次。如果在ListView
或者 GridView
中使用则会更加严重。
这节课程将会介绍如何使用 Heirachy Viewer
和Layoutopt
工具来检查和优化布局。
检查布局
在 Android SDK
中包含了一个href="http://developer.android.com/guide/developing/tools
/hierarchy-viewer.html">Heirachy Viewer
工具,使用该工具可以在您的程序运行的时候分析程序的布局。使用该工具来发现布局中的瓶颈所在。
Hierarchy Viewer 让你选择其连接的设备或者模拟器中的一个运行中的程序,然后显示该界面的布局树形结构。在每个控件方块中的交通灯分别代表 计算尺寸(Measure)、布局子控件(Layout)、和绘制的性能,通过颜色来帮助您分析潜在的问题。
例如,下图显示了一个用于 ListView
的布局。该布局在左边显示一个小图标,在图标右边显示两行文本内容。当该布局会被多次使用(inflated)到的时候性能问题就比较明显, 比如这个例子 由于这个布局是在ListView中使用的, 所以每个ListView中的一项都会解析下该布局然后绘制出来。
hierarchyviewer 工具位于 <sdk>/tools/ 目录。打开后 Hierarchy Viewer 将显示一个可用设备的列表和正在运行的界面。点击 Load View Hierarchy
来查看选中的界面的布局分析结果。例如,下图显示了上面定义的ListView中每一项的布局结果。
查看渲染一个View的时间
上面左侧的图中,您可以看到有三层布局结构。在每个方块上面点击可以查看显示该控件所需要的时间。对于需要时间比较长的地方就是我们应该去重点优化的地方。
显示一个列表条目所需要的时间如下:
-
Measure: 0.977ms
-
Layout: 0.167ms
-
Draw: 2.717ms
改进布局
上面的布局被一个嵌套的 LinearLayout
占用了过多的解析时间,如果把布局的嵌套层次降低可能会提高性能.使用 RelativeLayout
可以实现这个功能。使用RelativeLayout
后可以看到现在布局由3层变为了2层,分析图如下
使用RelativeLayout后的层次结构
Figure 4.
Layout hierarchy for the layout in figure 1,
using RelativeLayout
.
现在显示一个列表条目所需要的时间如下:
-
Measure: 0.598ms
-
Layout: 0.110ms
-
Draw: 2.146ms
看起来是一个很微弱的提升,但是这个时间可以叠加多次,应为每个列表条目在显示的时候都有解析该布局。
当在LinearLayout
中使用 layout_weight 就又不一样了,这样会增加计算控件大小的时间。在使用layout_weight的时候您应该多考虑考虑。
使用 Layoutopt
在您的最终布局文件中运行下 layoutopt
工具来看看还有没有可以优化的空间是个很好的习惯。 Layoutopt 工具也位于SDK的 tools/ 目录下,您可以用该工具优化单个文件也可以优化一个目录中的所有文件。
当您在单个文件中运行 layoutopt 后,该工具会打印出出现问题的行号和问题的描述,有些问题也会给出优化方案。例如
$ layoutopt samples/
samples/compound.xml
7:23 The root-level <FrameLayout/> can be replaced with <merge/>
11:21 This LinearLayout layout or its FrameLayout parent is useless
samples/simple.xml
7:7 The root-level <FrameLayout/> can be replaced with <merge/>
当你修改了布局文件以后,可以再次运行一下 Hierarchy Viewer 来看看具体提升了多少性能。
其它说明:http://www.apkbus.com/android-20040-1-1.html
相关推荐
第2篇为应用开发篇,通过实例介绍了Android UI布局、Android人机界面、手机硬件设备的使用、Android本地存储系统、Android中的数据库、多线程设计、Android传感器、Android游戏开发基础、Android与Internet,以及...
android性能优化之字符串,应用开发过程中字符串使用不当往往引起严重的内存问题。
Android应用性能优化 开发优秀的Android应用必备指南
MT6589_Android_scatter_emmc.txt 配置文件
android_UI布局设计 帮助文档 android开发必备
Android_开发培训教材,包括系统结构,应用程序设计,代码结构优化,与 Hacking
cpu修改代码,联想A60+的Android_scatter 用于升级手机cpu,功能很大,结构小巧,但很使用
《Android应用开发详解》源码,完整版,值得看一看。 《Android核心技术和开发详解》各章案例的全部源代码,第一章将要介绍的是Android开发起步的相关知识,首先对Android平台进行简单的介绍,其中包括Android的背景...
《Android应用开发》还对Android平台下开发环境的搭建、程序的签名和发布以及程序调试和性能优化所用到的工具和方法等进行了讲解。 《Android应用开发》适合有一定程序设计基础并致力于从事Android平台应用软件开发...
《Android平板电脑应用开发入门经典》向Android新手快速介绍了如何使用Android 3开发平板应用。经验丰富的作者Wei-Meng Lee首先介绍了如何安装必要的工具并编写HelloWorld应用。接下来介绍Android平板应用的各种组件...
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 ...
Android移动应用开发表格布局TableLayout的特点.pdf 学习资料 复习资料 教学资源
全书共分12章,主要以范例的方式来讲述Android的应用开发,详细介绍了3D动态壁纸、LBS类应用、导航与百度地图二次开发、理财类应用、餐饮行业应用、校园辅助应用、音乐休闲应用、新闻发布管理应用、休闲益智类3D/2D...
杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会...
《创意之钥:Android手机... 《创意之钥:Android手机交互应用开发》对各个层次的android移动应用开发读者皆有帮助;尤其对处于经验提升层面的读者,《创意之钥:Android手机交互应用开发》会帮助其在思路方面有所拓展。
一本基本把Android基本UI都涵盖的好资料,对于新手来说必看
【Android开发Wiki】进阶篇TV应用设计(一)—优化电视布局[收集].pdf
Android 相对布局实例 ,RalateLayout
Android资源_01-Android开发环境搭建_实验01-Android开发环境搭建.pdf、实验02-Android应用开发HelloWorld.pdf; 02-Android Studio项目结构分析与调试_实验03-Android Studio项目结构分析.pdf、实验04-Android ...
该文件是一些安卓手机通过MTK线刷时的必备文件