SurfaceView刷新率实现

时间:2016-05-05 09:43:31

标签: android surfaceview

我一直在专用线程中更新SurfaceView,其中一个紧密循环以lockCanvas开头,以unlockCanvasAndPost结束。

无论绘图有多简单,我都不会超过60FPS,因为这是显示器的刷新率。

我的问题是:如何执行此最高费率?

我希望lockCanvas成为阻塞方法(即插入适当延迟的方法),但分析似乎表明lockCanvas和unlockCanvasAndPost都会导致限制速率的延迟。

1 个答案:

答案 0 :(得分:2)

lockCanvas()获取要绘制的缓冲区,unlockCanvas()将缓冲区提交给系统合成器。如果没有空闲缓冲区,lockCanvas()将阻塞,直到有一个空闲缓冲区可用。如果SurfaceFlinger不立即处理IPC消息,unlockCanvas()可能会停止,但通常解锁应该快速返回。

如果您想了解图形系统的工作原理,请参阅graphics architecture doc。特别感兴趣的是关于game loops的部分;你正在做的是“队列填充”,这很容易做到,但延迟特性比基于Choreographer的方法略差。