VSync信号的由来以及用途

本文将简单介绍VSync垂直同步信号的由来,以及他在系统UI显示绘制过程中所起的作用。

单缓冲区
  • 在早期android(4.1以前) UI显示利用的是单缓冲区,在单缓冲区情况下,CPU和GPU绘图过程和屏幕刷新所用的buffer是同一块,假设此时屏幕的刷新频率和CPU/GPU的绘制速度不一致时,侧可能出现屏幕“割裂”的现象,即屏幕上同时显示两个不同帧中的部分画面。
双缓冲区
  • 为了解决单缓冲区带来的问题,那么双缓冲区就因运而生了,什么是双双缓冲区呢?就是屏幕显示和后台绘制各有一个缓冲区,假设这两个缓冲区依次叫做A/B。那么现在有一个问题就是何时交换这两个缓冲区?
VSync垂直同步信号
  • 为了解决何时交换AB缓冲区这个问题,这里就引入了VSync,每当系统发出一个VYsnc信号时,就立马交换两个缓冲区。VYsnc的信号间隔是 1/(CPU/GPU的FPS), FPS(Frames per Seconds)即频率。大部分Android设备的刷新频率都是60Hz,这也就意味着没一帧最多留给系统16ms的准备时间。
根据VSync的定义以及用途,开发过程中需要注意的事项。
  • 根据上面可以知道,假如绘制过程中某一帧画面的准备时间超过了16ms(这里假设设备刷新频率是60Hz)那么这一帧画面就会跨越两个或者更多的VYsnc信号,那么本该刷新的界面就会停留在上一帧的画面中。那么这就会带来UI显示上的画面滞后,卡顿,不流程的体验。
  • 因此在,开发过程中我们要尽量减少绘制过程中的耗时操作,具体点就是不要在onDraw()方法过程中进行过多耗时操作,到时onDraw()的调用时长超过 1/60。

你可能感兴趣的:(个人,笔记,技术)