Android Developers:优化布局结构

系统 2543 0

这是一个普遍的误解,使用基本的布局结构是最高效率的布局。然而,每个你加入你的应用程序的组件和布局 都需要初始化,布局,和绘制。例如,使用嵌套的LinearLayout实例能导致一个过深的视图结构。而且,嵌入 几个使用laytou_wight参数的LinearLyaout实例,由于每个孩子需要被测量两次导致特别昂贵的开销。当布局是 一个反复的填充的时候,这个特别重要,例如当被使用在一个ListView或者GridView中时。

在这个课程当中,你将会学习使用Hierarchyt Viewer和Layotopt来检查和优化你的布局。

检查你的布局

———————————————————————————————— ——————— ——————— ——————— ——————— ——

Android SDK工具包含了一个被称为Hierarchy Viewer的工具,它允许你在你的应用程序运行的时候分析你的布 局。使用这个工具帮助你发现在你的布局性能里面的瓶颈。

Hierachy Viewer允许你选择在一个连接的设备或者模拟器运行进程,然后显示这个布局树。在每个模块的交通 灯代表了它的测量值,布局和绘制性能,帮助你确定潜在的问题。

例如,Figure 1显示了一个布局,它被用做在一个ListView中的现象。这个布局在左边显示了一个小的位图,和 在右边堆放了两个文本项。它是尤其的重要由于这个布局将会被填充到多个选项—如这个—被优化性能执行效 将会成倍增加。

这个hierarchyviewer工具在<sdk>/tools/目录下提供,当被打开的时候,这个Hierarchy Viewer显示了一列有 效设备和它正在运行的组件。点击Load View Hierarchy来查看这个被选择组件的布局结构。例如,Figure 2显 示了Figure 1中列表项的布局。

在Figure 2中,你能看见一个 有一些问题的 显示文本的三级结构。点击这个选项,显示过程每个阶段使用的时 间(Figure 3)。这样哪个选项花费最长时间的测量,布局,和渲染,和哪里你应该花费时间来优化,就变得 清晰了。

使用这个布局渲染整个列表项使用的时间是:

  • 测量:0.977ms

  • 布局:0.167ms

  • 绘制:2.717ms

修正你的布局

————————————————————————————— ——— ——— ——— ——— ——— ——— ——— ——— ——— ——————

因为嵌入的LinearLayout使这个布局性能过于缓慢,这个性能可能通过压扁这个布局来改善—使这个布局扁且 宽,而不是窄且深。RelativeLayout可以作为这样布局的的根节点。所以,当这个设计转变成使用RelativeLay out,你能看见这个布局成为一个2级的结构。检查这个新的布局如下:

现在渲染一个列表项花费:

  • 测量:0.598ms

  • 布局:0.110ms

  • 绘制:2.146ms

可能看起来是一个很小的提升,但是这个时间是成倍的,因为这个布局被用于在一个列表的每个选项。

由于在LinearLayout设计的时候使用了layout_weight属性,大多数时间是不同的,它能减慢测量的速度。这 仅仅是每个布局如何被合适的使用,和你应该考虑使用layout_weight是必要的的一个例子。

使用Lint

—————————— ——— ——— ——— ——— ——— ——— ——— ——— ——— —————————————————————————

运行Lint工具, 在你的布局文件中搜索可能的视图结构最佳化是好的方式。Lint已经替代了Layoutopt工具,并 且有更多更强大的功能。Lint规则的一些例子如下:

  • 使用复合图片 — 一个包含一个ImageView和一个TextView的LinearLayout作为一个复合图片能被高效的 理。

  • 合并根框架 — 如果一个FrameLayout是一个布局的根,没有提供背景或者填充等,它能被一个更高效的 m erge标记来替代。

  • 无用的叶子 — 一个没有孩子或者没有背景的布局通常被移除(因为它是不可见的),为了一个更均匀的 更高效的布局结构。

  • 无效的父母 — 一个布局有孩子,它没有兄弟,它不是一个ScrollView或者一个根布局,并且没有一个背 ,可以被移除,并且它的孩子直接放入这个父母中,为了一个均匀且高效的布局结构。

  • 深布局 — 拥有过多嵌套不利于性能的布局。 考虑使用均匀的布局,如RelativeLayout或者Gridlayout来提 升性能。这个默认的最大深度为10。


Lint的其它的好处是它被整合到Eclipse的Android Development Tools(ADT 16+)。每当你输出一个APK的时候 Lint自动运行,编辑和保存一个XML文件,或者使用这个布局编辑器。为了手动打开Lint,点击在Eclipse工具 栏的Lint按钮。


当在Eclipse中被使用的时候,Lint有自动固定一些问题的能力,为别人提供建议和直接跳到出错的代码检查。 如果你没有使用Eclipse开发,Lint也能通过命令行运行。更多关于Lint的信息可以在tools.android.com中。

Android Developers:优化布局结构


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论