一、前言:
我们知道屏幕显示一张图像是从左上角一个像素一个像素挨个显示的,我们常见的有水平同步(Horizontal Sync)和垂直同步(Vertical Sync)两种刷新方式,也就是Hsync和Vsync,其中,屏幕发出水平同步信号时候,我们就开始换行刷新下一行。屏幕发出垂直同步信号(Vsync)时候,我们就换下一帧图像进行刷新。比如,常见的刷新率为60HZ的屏幕,那么,我们就会16.6ms收到一次Vsync信号。
二、单缓冲机制:
我们知道Android底层是Linux,Linux显示驱动里面的FrameBuffer代表了屏幕即将要显示的画面,也就是说,在屏幕Vsync信号到来的时候,就会将FrameBuffer中的内容逐个像素扫描到屏幕上去。如果我们只有一个FrameBuffer会出现什么情况呢?
如上图所示,三个阶段情况如下:
- 0.01秒的时候:Buffer中准备好了第一帧数据,显示器显示了一部分第一帧数据;
- 0.015秒的时候:显示器才完整显示出了第一帧数据,但是Buffer中已经填充了部分第二帧数据;
- 0.02秒的时候:Buffer中已经准备好了第二帧数据,显示器出现“撕裂”,一部分显示第一帧,一部分显示第二帧。
这是可以理解的,相当于你当着别人的面画