2011-08-09 5 views
1

私はAndroidの下でスクロールするためにスレッドを使用しています。 スレッド実行方法は古典的です。私はインターネットでそれを取った 私のビューはSurfaceViewです。60Hzのアニメーションはどのように機能しますか?

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ですか? そうなら、フリップが終わったら?

インターネット上の情報はありません。

感謝の エティエンヌ

答えて

1

それは確かにダブルバッファされ、フリップ)は(SurfaceHolder.unlockCanvasAndPostで行われます。このうち

チェック:http://developer.android.com/reference/android/view/SurfaceHolder.html#unlockCanvasAndPost(android.graphics.Canvas

[編集]申し訳ありませんが、あなたの最初の質問を忘れてしまいました。

Androidは常にvsyncを有効にしているため、lockCanvas()またはunlockCanvasAndPost()のいずれかが同期の残り時間をブロックします。 ブロックするlockCanvas()またはunlockCanvasAndPost()があれば私の頭はわかりませんが、必要ならばそれをチェックするだけで十分です。

0

少なくともAndroid 2.3、SGSでは、ロックはlockCanvas()にあります。この電話の前後にSystem.nanoTime()と呼んで測定しました。

関連する問題