我正在使用Thread在Android下滚动。 线程运行方法很经典。我把它带到了互联网上 我的观点是SurfaceView。
public void run() {
Canvas canvas = null;
while (_run) {
canvas = _surfaceHolder.lockCanvas();
if (canvas != null) {
_surface.doDraw(canvas);
_surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
我不明白的是: 为什么doDraw(将在屏幕上绘制)被称为每秒60次? 为什么没有同步问题?
我不知道LCD是如何工作的,但是在屏幕上,如果你在不等待屏幕同步的情况下进行滚动,屏幕顶部可能会显示上一张图像,而底部则显示正确的图像。我在Android上没有这个问题。
SurfaceView是否可以处理一种双缓冲? 如果是这种情况,那么翻转完成了吗?
我在互联网上找不到任何关于此的信息!
感谢的 艾蒂安
答案 0 :(得分:1)
确实是双缓冲的,翻转是在SurfaceHolder.unlockCanvasAndPost()中完成的。
[编辑]抱歉,忘了你的第一个问题。
Android始终启用了vsync,因此lockCanvas()或unlockCanvasAndPost()将阻止同步它的剩余时间。 我不知道我的头是否是阻止的lockCanvas()或unlockCanvasAndPost(),但它应该很容易检查你是否需要它。
答案 1 :(得分:0)
至少在Android 2.3,SGS上,锁定在lockCanvas()
。我通过在此次通话之前和之后拨打System.nanoTime()
来测量它。