Article / 2026/05/31
性能优化 (三十三) 视图绘制优化实战
性能优化 (三十三) 视图绘制优化实战 的技术笔记。
视图绘制优化实战
视图绘制回顾
- 测量:确定大小
- 布局:确定位置
- 绘制:绘制视图
性能瓶颈
- 每个阶段都耗时
- 自顶而下的遍历
- 触发多次
优化布局层级及复杂度
准则
- 减少View层级
- 宽而浅,避免窄而深
ConstraintLayout
- 实现几乎完全扁平化布局
- 构建复杂布局性能更高
- 具有RelativeLayout和LinearLayout特性
- 布局层级及复杂度
- 不嵌套使用RelativeLayout
- 不在嵌套LinearLayout中使用weight
- merge标签:减少一个层级,只能用于根View
过度绘制
- 一个像素最好只被绘制一次
- 调试GPU过度绘制
- 蓝色可接受
避免过度绘制
- 去掉多余背景色,减少复杂shape的使用
- 避免层级叠加
- 自定义View使用clipRect屏蔽被遮盖View绘制
其他
- Viewstub:高效占位符、延迟初始化
- onDraw中避免:创建大对象、耗时操作
- TextView优化
你在做布局优化过程中用到了那些工具
- Choreographer
- AOP、Hook
- Systrace、LayoutInspector
布局为什么卡顿,你又是怎么优化的
- IO、反射、遍历、重绘
- 异步Inflate、X2C、减少层级、重绘
- AOP、监控
做完布局优化你有什么成果产出
- 体系化监控手段线上+线下
- 指标:FPS、加载时间、布局层级
- 核心路径保障
Giscus 未启用:请在
src/site.config.ts中配置 repoId 与 categoryId。