第一篇_布局优化
一,影响面
布局的设计和编码影响是多方面的,包括界面启动,交互相应,内存,GC
二,思路和要求
整体布局思路:要求layout呈现扁平化,宽而浅的效果。
基本要求:
1. 界面layout框架绘制控制在1次以下
2. 大容器ViewGroup控制在3次绘制
3. View控制4x次的绘制
4. 一般主页等重度页4x绘制控制在整个layout的1/4,轻度页3x绘制控制1/4并且无4x绘制。
备注:过渡绘制指打开系统设置开发者模式过渡绘制选项,蓝色(1x次绘制)-》浅绿色(2x绘制)-》紫色/淡红色(3x绘制)-》红色(4x绘制)
三,检测维度
根据业务的不同与所需要的测试粒度的不同,就会有不同的检测维度,主流面采用如下:
1. 界面过度绘制(检测过度绘制)
2. 渲染性能(抓取UI渲染性能呈现,尤其是自定义控件)
3. 布局边界合理性(检测元素显示的合理性)
四,典型问题
1. 视图不必要的相互重叠、窄而深的设计
2. 有不必要的多层背景(Theme、Activity、ViewGroup、selector)
3. 不必要立即渲染的控件
五,调测工具
检测和解决界面性能问题很大程度上依赖于应用程序UI设计和layout架构,Andorid提供了很多调试工具,常见的界面性能调试工具如下:
1,开发者模式观察_过度绘制区域
基本功能:检测过渡绘制结果
说明:关注纵向层叠
打开方式:设置-》开发者选项-》调试GPU过度绘制-》显示过度绘制区域
示例:略
2,开发者模式观察_布局边界
基本功能:检测具体layout设计
说明:关注横向重叠
打开方式:设置-》开发者选项-》显示边界
示例:略
3, Hierarychy view
基本功能:检测布局层级,抓取渲染耗时重灾区
打开方式:Eclipse或Studio中打开Android Device monitor
说明:该工具的兼容性和成功率有较大问题,可尝试配合使用
示例:图中4为onDraw()等执行情况,有3个颜色,绿色,黄色,红色,红色代表着耗时最长。
4,Lint: Performance
基本功能:检测布局以及xml代码,提供优化建议
打开方式: Studio2.2中打开当前xml文件,Analyze-》inspect code-》current file
说明:如果还没有迁移到studio可以针对性单文件使用
示例:如图直接提示多余的一个FrameLayout
5,Studio: BluePrint
基本功能:检测布局,编码期实时调试边界和层级
打开方式:Studio2.2中xml文件编辑菜单
说明:如果还没有迁移到studio可以针对性单文件使用
示例:如图
6,Studio: layout inspector
基本功能:检测布局层级
打开方式:Studio2.2中Android Monitor-》layout inspector
说明:兼容性有问题,尝试配合使用
示例:如图
六,扩展
1,开发者模式:观察追踪渲染性能
基本功能:追踪渲染性能,帧画面渲染的耗时
打开方式:开发者选项-》 GPU 呈现模式分析-》在屏幕上显示为条形图,兼容性有问题,可尝试配合使用
说明:
这个工具会在Android 设备的屏幕上实时显示当前界面的最近 128 帧的 GPU 绘制图形数据,中间有一条绿线,代表 16 ms ,保持动画流畅的关键就在于让这些垂直的柱状条尽可能地保持在绿线下面。
每一个柱状图都是由三种颜色构成:蓝、红、黄。
蓝色代表的是这一帧绘制 DisplayList 的时间。通俗来说,就是记录了需要花费多长时间在屏幕上更新视图。用代码语言来说,就是执行视图的 onDraw 方法,创建或更新每一个视图的 Display List 的时间。
红色代表的是这一帧 OpenGL 渲染 DisplayList 所需要的时间。通俗来说,就是记录了执行视图绘制的耗时。用代码语言来说,就是 Android 用 OpenGL ES 的 API 接口进行 2D 渲染 Display List 的时间。
黄色代表的是这一帧 CPU 等待 GPU 处理的时间。通俗来说,