Android 布局优化
Posted 潇潇微雨up
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 布局优化相关的知识,希望对你有一定的参考价值。
android布局优化是性能优化的一个方面,主要是选择适合的布局 尽量减少嵌套的层数。
使用工具检查嵌套层数
如何减少布局的嵌套层数呢,一种是我们写代码的时候自行注意,还可以使用工具来检查布局的层数
如果你是使用AS开发的话,你可以在 AS 工具栏中点击 Tools–>Android–>Android Device Monitor–>Hierarchy View
但是这个工具 如果使用的真机不能使用。只能使用模拟器或者开发机。
通过这个工具可以查看布局的层数,进而可以进行优化
在手机中 在开发者选项中有一个显示GPU过度绘制 选项
选择这个可以在手机上根据颜色显示布局的层数
根据这个 我们可以看出自己布局的嵌套层数 进而进行修改
需要注意的是 如果你给你的View设置了过多的backGround 也会导致过度的绘制 使用 draw-selector 比 color会多一层绘制 需要注意一下
优化布局代码
在写布局的时候 有三个标签可以用来优化布局
include merge ViewStub
include 可以重用布局
merge可以合并相同的嵌套层
ViewStub可以用来隐藏不需加载的布局
之后 我们还可以把公共的布局属性提取到一个style中 复用 ,清晰布局结构
最后 还有一个Android Lint工具 可以用来分析代码的结构 来提示相应的优化
Android Lint:
静态代码分析工具,无需运行,无需测试用例 扫描整个项目,分析以下潜在的问题,分类指出问题描述、问题位置,并提供合理的修改建议(这是才是关键啊,不管有木有大问题,看看这些问题及描述,也能过把瘾啊): ==================================== correctness 正确性 security 安全性 performance 性能 usability 可用性 accessibility 可达性 internationalization 国际化 ====================================
1)性能
布局性能(以前是 layoutopt工具,可以解决无用布局、嵌套太多、布局太多、overdraw)
其他性能(如:draw/layout 时进行对象的声明等)
2)未使用到资源、资源缺少(不同资源的适配)
3)有更高性能的资源替换 —- eg:SparseBooleanArray SparseIntArray
4)国际化问题(硬编码)
5)图标的问题(重复的图标,错误的大小)
6)可用性问题(如不指定的文本字段的输入型)
7)manifest文件的错误 – 未注册activity service等等
8)内存泄露 — 如:handle的不当使用 。
9)占内存的资源及时回收 — 如:TypedArray未回收资源等
还有几点零散的 也在这记录一下:
有选择性的使用性能较低的控件
比如 当 既可以使用 LinearLayout 又可以使用 RelativeLayout时 要选用 LinearLayout 因为relativeLayout耗费的时间更多一点
使用 include标签时 如果指定了 layout_*属性 那么 layout_width和layout_height属性必须都存在 否则无效
ViewStub标签 只会inflate一次 然后就不可以使用了,要使用 只能获取里面的View进行显示隐藏了 并且 它不可以和merge一起使用
以上是关于Android 布局优化的主要内容,如果未能解决你的问题,请参考以下文章