60Hz的动画如何工作?

时间:2011-08-09 15:56:45

标签: android multithreading view vsync

我正在使用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是否可以处理一种双缓冲? 如果是这种情况,那么翻转完成了吗?

我在互联网上找不到任何关于此的信息!

感谢的 艾蒂安

2 个答案:

答案 0 :(得分:1)

确实是双缓冲的,翻转是在SurfaceHolder.unlockCanvasAndPost()中完成的。

检查出来:http://developer.android.com/reference/android/view/SurfaceHolder.html#unlockCanvasAndPost(android.graphics.Canvas

[编辑]抱歉,忘了你的第一个问题。

Android始终启用了vsync,因此lockCanvas()或unlockCanvasAndPost()将阻止同步它的剩余时间。 我不知道我的头是否是阻止的lockCanvas()或unlockCanvasAndPost(),但它应该很容易检查你是否需要它。

答案 1 :(得分:0)

至少在Android 2.3,SGS上,锁定在lockCanvas()。我通过在此次通话之前和之后拨打System.nanoTime()来测量它。