Android性能优化 笔记

笔记内容来源

  1. 胡凯
  2. anly_jun
  3. Carson_Ho

1.Android性能优化之渲染篇

1.VSYNC

  1. 帧率:GPU在1秒内绘制操作的帧数.如60fps.
    • 我们通常都会提到60fps与16ms,这是因为人眼与大脑之间的协作无法感知超过60fps的画面更新.
    • 开发app的性能目标就是保持60fps,这意味着每一帧只有16ms=1000/60的时间来处理所有的任务
  2. 刷新率:屏幕在1秒内刷新屏幕的次数.如60Hz,每16ms刷新1次屏幕.
  3. GPU获取图形数据进行渲染,然后屏幕将渲染后的内容展示在屏幕上.
  4. 大多数手机屏幕的刷新率是60Hz,如果GPU渲染1帧的时间低于1000/60=16ms,那么在屏幕刷新时候都有最新帧可显示.如果GPU渲染某1帧 f 的时间超过16ms,在屏幕刷新时候,f并没有被GPU渲染完成则无法展示,屏幕只能继续展示f的上1帧的内容.这就是掉帧,造成了UI界面的卡顿.
    下面展示了帧率正常和帧率低于刷新率(掉帧)的情形

2.GPU渲染:GPU渲染依赖2个组件:CPU和GPU

  1. CPU负责Measure,Layout,Record,Execute操作.
  2. GPU负责Rasterization(栅格化)操作.
    • Resterization栅格化是绘制那些Button,Shape,Path,String,Bitmap等组件最基础的操作.它把组件拆分到不同的像素上进行显示.这是一个很费时的操作.
    • CPU负责把UI组件计算成Polygons(多边形),Texture(纹理),然后交给GPU进行栅格化渲染.
  3. 为了App流畅,我们需要确保在16ms内完成所有CPU和GPU的工作.

3.过度绘制

Overdraw过度绘制是指屏幕上的某个像素在同一帧的时间内被绘制了多次.过度绘制会大量浪费CPU及GPU资源/占用CPU和GPU的处理时间

  • 过度绘制的原因
    1. UI布局存在大量重叠
    2. 非必须的背景重叠.
      • 如Activity有背景,Layout又有背景,子View又有背景.仅仅移除非必要背景就可以显著提升性能.
    3. 子View在onDraw中存在重叠部分绘制的情况,比如Bitmap重叠绘制

4.如何提升渲染性能

猜你喜欢

转载自juejin.im/post/5b99e03ae51d450e6237c007
今日推荐