它是一种常见的误解,认为使用基本布局结构导致最高效的布局。但是,您添加到您的应用程序的每个窗口小部件和布局需要初始化,布置和绘制。例如,使用的嵌套实例的LinearLayout
可能会导致过深视图层次。此外,嵌套多个实例的LinearLayout
使用该layout_weight
参数可以为每个孩子需要被测量两次是特别贵。这一点尤其重要,当布局被反复充气,在使用时如的ListView
或GridView控件
。
在本课中,您将学习如何使用Hierarchy Viewer层次结构查看器和Layoutopt检查和优化布局。
检查你的布局
Android SDK中的工具包括一个名为工具Hierarchy Viewer层次结构查看器,允许你在你的应用程序运行分析你的布局。使用这个工具可以帮助你发现在布局的性能瓶颈。
层次结构查看器的工作原理是让你选择正在运行的进程所连接的设备或仿真器上,然后显示布局树。红绿灯每块代表其度量,布局和绘图性能,帮助您识别潜在的问题。
例如,图1显示了公司作为项目的一个布局的ListView
。这种布局显示在右边的左边和文本的两个堆叠的物品的小的位图图像。这是特别重要的布局,将被充气多次,如此一最优化的性能优势将成倍增加。
![](http://developer.android.com/images/training/layout-listitem.png)
图1。概念布局的项目在ListView中
。
该hierarchyviewer
工具可在 <SDK> /工具/
。当打开时,层次结构查看器显示可用设备及其运行的组件的列表。点击 加载视图层次来查看所选组件的布局层次。例如,图2示出用于由图1所示的列表项的布局。
![](http://developer.android.com/images/training/hierarchy-linearlayout.png)
图2为图1中的布局视图层次结构中,使用的嵌套实例的LinearLayout
。
![](http://developer.android.com/images/training/hierarchy-layouttimes.png)
图3。点击一个层次结构节点显示其性能时间。
在图2中,你可以看到有一些问题奠定了文本项的3层结构。点击项目显示采取的过程的每个阶段(图3)的时间。它变得清楚哪些项目耗时最长测量,布局和渲染,并在那里你应该花时间去优化。
计时使用此布局呈现一个完整的列表项是:
- 措施:0.977ms
- 布局:0.167ms
- 抽签:2.717ms
修改你的布局
因为上面的布局性能减慢由于嵌套的LinearLayout
,性能可能会被压扁完善布局,使布局浅而宽,而不是窄而深。一个RelativeLayout
作为根节点允许这样的布局。所以,当这样的设计被转换成使用RelativeLayout
,你可以看到布局成为2层结构。新的布局检查看起来像这样:
![](http://developer.android.com/images/training/hierarchy-relativelayout.png)
图4为图1中的布局视图的层次结构,使用RelativeLayout
。
现在,渲染列表项需要:
- 措施:0.598ms
- 布局:0.110ms
- 抽签:2.146ms
可能看起来像一个小小的改进,但这个时间乘以几倍,因为这种布局是用于每个项目在列表中。
大多数这样的时间差是由于使用的layout_weight
在LinearLayout中
的设计,这可以减慢测量的速度。它是如何布局的每一个都有相应的用途,您应该谨慎考虑是否使用布局的重量是必要的只是一个例子。
使用Lint
它始终是很好的做法,运行Lint您的布局文件的工具,以寻找可能视图层次结构的优化。皮棉已经取代了Layoutopt工具,具有更强大的功能。Lint一些例子规则是:
- 使用化合物可绘-甲
LinearLayout中
,其中包含一个ImageView的
和一个TextView中
可以更有效地作为一个化合物绘制处理。 - 合并根帧-如果一个
FrameLayout中
是一个布局的根,并且不提供背景或填充等,它可以被替换为一个合并标签,它是稍微更有效。 - 没用叶 - 具有了一个更平,更高效的布局层次没有子女或没有背景通常可以删除(因为它是无形的)的布局。
- 无用的家长-有孩子的布局,有没有兄弟姐妹,是不是
或根布局,没有一个背景,可以被删除,有其子直接移动到父了一个更平,更高效的布局层次。ScrollView
- 深布局-布局过多的嵌套是不好的表现。请考虑使用平坦的布局,如
RelativeLayout
或GridLayout
,以提高性能。默认的最大深度为10。
Lint的另一个好处是,它被集成到Android的开发工具为Eclipse(ADT 16 +)。Lint 当你导出APK,编辑和保存XML文件,或使用PCB编辑器会自动运行。要手动强制Lint 在Eclipse工具栏上运行按皮棉按钮。
![](http://developer.android.com/images/training/lint_icon.png)
当在Eclipse中使用,Lint 有自动修复一些问题,提供建议和其他直接跳到审查有问题的代码的能力。如果你不使用Eclipse进行开发,Lint ,也可以在命令行中运行。关于林特更多信息,请tools.android.com。