我们一般衡量流畅度都是以16ms为标准的,那么这个16ms是怎么来的呢?
先了解一个概念,刷新率:至的是一秒内刷新屏幕的次数,一般都是60hz;
1000ms / 60 约等于 16ms一帧。
ui的刷新过程大概如下:
1,display 代表显示器或者屏幕
2,cpu负责计算数据,然后将数据交给gpu,gpu对图像的数据进行渲染,再把渲染好的数据放到buffer里面,显示器或者屏幕会隔一段时间去buffer里拿数据并且显示出来
但是,这么做的话会出现问题,刷新率和帧率不能保持相同的节奏(gpu放的比屏幕取数据快,或者屏幕取数据比gpu放的要快);
针对以上问题,安卓系统有vsync(垂直同步来解决)、三层buffer
垂直同步使刷新率和帧率保持相同的节奏,会每隔16ms发出一个vsync信号,收到了vsync信号之后才会进行画面绘制。
画面撕裂:一个画面上出现了多帧画面内容,帧率大于刷新率导致,如下图:
图一:帧率大于刷新率,造成画面撕裂;图二:帧率小于刷新率,同一帧数据会显示多次