Android布局优化是性能优化的一个方面,主要是选择适合的布局 尽量减少嵌套的层数。

使用工具检查嵌套层数

如何减少布局的嵌套层数呢,一种是我们写代码的时候自行注意,还可以使用工具来检查布局的层数
如果你是使用AS开发的话,你可以在 AS 工具栏中点击 Tools–>Android–>Android Device Monitor–>Hierarchy View
但是这个工具 如果使用的真机不能使用。只能使用模拟器或者开发机。

通过这个工具可以查看布局的层数,进而可以进行优化

在手机中 在开发者选项中有一个显示GPU过度绘制 选项

选择这个可以在手机上根据颜色显示布局的层数

android stuido 查看layout android:layout_width="-2"_嵌套

根据这个 我们可以看出自己布局的嵌套层数 进而进行修改
需要注意的是 如果你给你的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一起使用