- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【Android开发Wiki】进阶篇提供布局的整体性能(一):优化布局层次结构
eoe 移动开发者社区 /
原文链接:
/training/improving-layouts/optimizing-layout.html
现在大家有一个共同的误解那就是使用最基础的布局结构式最有效的布局方式。但是,在我
们的应用里面所添加的每一个widget和layout都需要初始化、布局和绘制。如嵌套使用L
inearLayout实例可能会导致视图层级过深。更坏的是使用layout_weight这个参数多次嵌
套LinearLayout可能会让各个子模块付出执行两次的昂贵代价。这在多次布局填充时尤为
重要,如使用ListView 或者GridView。
通过这一课的学习,我们可以学着使用视图层次和 Layoutopt工具去检测和优化我们的布
局。
检查你的布局
Android SDK工具中有一种叫Hierarchy Viewer的工具可以让我们在应用程序运行时分析
布局。使用这个工具可以帮助我们发现布局工作的瓶颈。 Hierarchy Viewer是通过允许我
们在连接着的设备或模拟器上选择正在运行的进程来工作的,从而显示在布局树上。各个板
块的信号灯分别代表此工具的方法、布局以及性能绘制,帮助我们分析潜在的问题。 例如,
如图1使用了一个控件在ListView中。这个布局显示一个小的bitmap图像在左边,右边有
两个文本框。这在多次填充之时尤为重要,比如下例——通过优化性能优势可能倍增。
图1 在ListView一个控件布局的概念
Hierarchyviewer工具在“sdk/tools/”目录下是可用的。当其打开时,可以显示可用设
备和正在运行组件的列表。点击* Load View Hierarch* 检查所选组件层次结构。如图2是
的图1中各个组件的说明。
eoe 移动开发者社区 /
图2 图一中嵌套使用LinearLayout布局的布局层次
图3 点击一个层次节点,可以看到其所展现的样子
在图2中我们可以看到连接很多关系线(problems laying out,不是很确定,如果有高手请
给指点一下)的文本框呈现三个层级。点击各个控件可以显示进程的每一步时间花费情况(图
3)。通过这可以很清楚的了解到测试、布局、渲染所花费的时间,这也是我们需要花费时间
优化的地方。
在这个布局里完成渲染列表控件所需要的时间为:
Measure: 0.977ms
Layout: 0.167ms
Draw: 2.717ms
修正你的布局
由于使用嵌套的LinearLayout在布局面板上会减慢性能,通过扁平化不仅可能会提高性能
——使用浅而宽的布局而非窄而深的布局。作为根节点的RelativeLayout允许这种布局,
因此当页面设计转为使用RelativeLayout时,我们会发现布局变成了双层结构。通过对比
可以发现新的布局如下图所示:
eoe 移动开发者社区 /
图4 使用RelativeLayout后图1布局的层次结构
现在的渲染时间列表如下:
Measure: 0.598ms
Layout: 0.110ms
Draw: 2.146ms
虽然这看起来只是很小的改进,但是由于这个改进会在列表中的每一个控件中使用,可以成
倍的提升性能。
这次最大的不同是因为在LinearLayout的设计中使用了layout_weight,而这个会导致测
试的速度变慢。这只是需要认真考虑的每个布局是否用法适当以及是否有必要使用weight
这一属性的一个例子。
使用Lint工具
使用Lint工具在布局文件中寻找可能的多层次优化方案时通常是一种很好的体验。Layout
opt已经由功能更强大的Lint替代了。Lint规则的一些例子如下:
使用混合绘制的方法——使用混合绘制的方法将会比由一个ImageView和一个TextView组
成的LinearLayout更加有效率。
组合根结构——如果一个FrameLayout是在布局的根目录下并且没有背景和填充时,可以被
稍微更有效的组合标签所取代。
尽量少使用叶子节点——如果一个布局没有子节点或背景同样可以被移除(因为它不可见),
从而变成更扁平更有效的布局层次。
尽量少使用双亲结点——一个有孩子节点而没有兄弟节点的布局不是 ScrollView或根布
局,并且也没有背景,可以被移除从而让其子节点直接指向双亲结点,从而变成更扁平更有
效的结构层次。
eoe 移动开发者社区
文档评论(0)