GPU渲染流程
我们要做UI绘制优化,首先要了解GPU的绘制流程.即问题产生的原因,APP为什么会出现画面的卡顿和不流畅.
我们在布局文件或代码中绘制一个图形,是怎样显示到手机屏幕中的呢?
例如,在xml中写一个button布局
- 首先,通过layoutinflater生成一个button对象,保存到内存中,这个对象保存button的信息,包括左上右下和宽高
- 然后,CPU需要计算,处理成多维的向量图形,可以理解为,CPU通过计算,给出一个公式,告诉GPU这个图形用这个公式去渲染.
- 最后,GPU将矢量图形栅格化,进行像素填充,完成绘制.
60HZ刷新频率由来
在与手机交互过程中,如触摸和反馈,60帧以下人是可以感觉出来的.60帧以上不能察觉变化.即每秒钟要有60帧画面.1000ms/60 = 16.6ms.即每16ms就要进行一次渲染.
Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能达到流畅画面所需要的60fps.这意味着计算渲染的大多数操作都必须在16ms内完成.
当这一帧画面渲染时长超过16ms时,垂直同步机制会让显示器 硬件等待GPU完成栅格化渲染操作,这样会让这一帧画面多停留16ms甚至更多.这样就造成了用户看起来画面停顿.
优化方案
-
过度绘制优化
image.png
减少不必要的嵌套
使用merger避免父布局重叠
使用include复用
image.png
-
布局优化
image.png
网友评论