Android优化篇之布局优化

112 阅读1分钟

布局优化

绘制原理

  • view绘制主要有三个步骤:measure、layout、draw。运行在应用程序应用框架层,而真正将数据渲染到屏幕上是依赖 Native 层的 SurfaceFlinger 服务来完成。
  • 绘制过程主要由CPU来完成measure、layout、record、execute的数据计算工作GPU负责栅格化、渲染
  • CPUGPU 通过图形驱动层进行连接,图形驱动层维护一个队列,CPU负责将display list添加到该队列,GPU负责从队列中取出数据进行绘制。

卡顿原因

  • 布局过于复杂,16ms 内无法完成渲染
  • 同一时间动画执行次数过多,导致CPU或GPU负载过重
  • view过度绘制,导致某些像素同一帧绘制多次
  • UI线程耗时操作
  • GC回收时暂停时间过长 或 频繁GC产生大量暂停时间

卡顿分析

  • 过度绘制检查 开发者工具打开 GPU 过度绘制开关

白-蓝-绿-粉-红,颜色越深嵌套越多

优化方案

  • 合理运用布局,减少层级嵌套
  • include,布局复用
  • merge,去除多余层级
  • viewstub,按需显示,提高加载速度
    Viewstub只能加载一次,加载后置空,不能嵌套merge,操作还需操作具体view
  • 避免 GPU 过度绘制

移除XML中重叠控件中不必要的背景色

自定义view的onDraw中使用canvas.clipRect指定区域绘制,防止重叠的组件过度绘制