2011-08-09 63 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倍? 爲什麼沒有同步問題?

我不知道液晶顯示器是如何工作的,但在屏幕上,如果您在不等待屏幕同步的情況下進行滾動,屏幕的頂部可能會顯示上一張圖像,而底部會顯示正確的圖像。我在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()進行了測量。