1

Androidでスクロールするためにスレッドを使用しています。スレッド実行方法は古典的です。インターネットで撮った 私のビューはSurfaceViewです。

public void run() {
    Canvas canvas = null;
    while (_run) {
        canvas = _surfaceHolder.lockCanvas();
        if (canvas != null) {
            _surface.doDraw(canvas);
            _surfaceHolder.unlockCanvasAndPost(canvas);
        }
    }
}

私が理解していないのは、なぜ doDraw (画面に描画される) が 1 秒あたり正確に 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 に答える