【安卓开发系列 -- APP】APP 性能优化 -- 布局优化
【1】Android 绘制原理
渲染操作通常依赖 CPU 与 GPU,CPU 负责包括 Measure,Layout,Record,Execute 的计算操作,GPU 负责 Rasterization(栅格化)操作;
VSYNC 信号
Android 系统每隔 16ms 发出 VSYNC 信号,触发对 UI 的渲染操作;Refresh Rate 表示屏幕在一秒内刷新屏幕的次数,取决于硬件的固定参数;Frame Rate 表示 GPU 在一秒内绘制操作的帧数;Frame Rate > Refresh Rate 导致画面撕裂;Frame Rate < Refresh Rate 导致丢帧;
【2】Android 布局加载原理
对布局加载过程的拦截
【3】Android 布局优化方式
【3.1】过度绘制
Overdraw(过度绘制)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次;在多层次的 UI 结构中若不可见的 UI 也在做绘制的操作,便会导致某些像素区域被绘制了多次;导致 CPU 和 GPU 资源的浪费;
【3.1.1】过度绘制检测
【3.1.2】过度绘制优化方法
过度绘制的优化方式
1. 移除Window默认的background
2. 移除XML布局文件中的非必须的background
3. 按需显示占位图片
4. 对于复杂的自定义 view,Android 系统无法监控并自动优化
5. 采用 canvas.clipRect 帮助系统识别那些可见的区域
6. 采用 canvas.quickreject 判断是否相交
7. 采用优化标签 include标签,merge标签,ViewStub 标签
布局方面
1. 减少嵌套层级
2. 优先使用线性布局
3. 采用 ConstraintLayout
【3.2】布局加载优化方式
采用 java 代码加载
1. XML 存在 IO 操作与反射操作导致加载耗时;
2. 采用 java 方式构造布局,代码量大,不易实现,不易维护;
X2C 开源框架将 XML 转换为 JAVA 代码
异步加载布局
参考
本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。