1

我正在使用 Thread 在 Android 下进行滚动。线程运行方法是经典的。我在 Internet 上拿了它我的视图是 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 吗?如果是这种情况,何时完成翻转?

我在互联网上没有找到任何相关信息!

谢谢艾蒂安

4

2 回答 2

1

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

看看这个:http: //developer.android.com/reference/android/view/SurfaceHolder.html#unlockCanvasAndPost (android.graphics.Canvas )

[编辑]对不起,忘记你的第一个问题。

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

于 2011-08-09T16:04:41.467 回答
0

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

于 2012-04-06T16:08:51.660 回答