Android 优化布局层次结构
2016-02-28 15:07
387 查看
使用HierchyViewer
HierchyViewer需要你选择一个已连接的设备或者模拟器中的一个运行的程序,显示出布局的树结构。每个块上的红绿灯代表它的测量,布局,以及绘图性能,帮助你找出潜在的问题。有读者在读完《AndroidUI 优化——使用HierarchyViewer工具》后提出HierarchyViewer没有显示出红绿黄灯和时间,这怎么解决。在tool目录启动HierarchyViewer确实没有相应的设置去显示,但是可以在eclipse中启动HierarchyViewer去设置。Window->Open Perspective->others->hierarchyviewer。在Tree
View点击三个圆圈的按钮,如图一:
图一
图一图二给出了显示绘制时间和不显示绘制时间的区别:
图二 图三
我们开始分析一个ListView的item布局,如图四,这个布局的左边显示了一幅图片,两个文字item放在右边。当布局被重复加载的时优化显得尤为重要。
图四
图四的布局文件在HierarcheyViewer中显示的层次结构如图五,选中LinearLayout会显示各种性能参数,如图六:
图五 图六
在图五中显示视图有三层结构,并且有些显示了红灯黄灯,这就需要我们优化,图六中也显示了绘制时间。
上述布局性能较低的原因主要是由一个内嵌的LinearLayout所引起,为了提高性能,我们使用RelativeLayout,将该布局浅而广的扁平化结构代替为深而窄的树形结构,这样该布局变为一个2层的结构,修改后的布局结构如图七:
图七
此时,绘制时间减少了,并且去掉了红灯、黄灯显示。
使用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.
相关文章推荐
- ubuntu 64位android项目报错的解决方案,打开64位 Ubuntu 的32位支持功能
- Android Drawable 那些不为人知的高效用法
- 自定义组件API详解
- Android测试系列之Instrumented Unit Test-Espresso
- 用Android Sutdio调试NDK
- Android 操作系统的内存回收机制
- Android性能优化典范(四)
- Android项目打包开启proguard的混淆优化带来的问题
- Android性能优化典范(三)
- Android动画框架(三)----布局动画&Activity过渡动画
- android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
- Android的高级特效—索引
- Android性能优化典范(二)
- Android时钟控件
- 史上最全Android Studio快捷键 -2016-02-28
- 史上最全Android Studio快捷键 -2016-02-28
- 广师Android群分享之应用系统相关
- android获取屏幕的宽高
- Android内存优化-泛谈二
- ANDROID内存优化(大汇总——全)