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。