2011-06-06 42 views

回答

1

SurfaceView中的圖已經在單獨的線程中處理。你不需要產生一個新的。

參見API doc一下:

一個此類的目的之一是提供一種表面,其中輔助線程可以渲染到屏幕。如果你要使用這種方式,你需要了解一些線程的語義:

  • 所有SurfaceView和SurfaceHolder.Callback方法將運行SurfaceView窗口(一般的主線程的線程調用應用)。因此它們需要與繪圖線程所觸及的任何狀態正確同步。
  • 您必須確保繪圖線程僅在SurfaceHolder.Callback.surfaceCreated()和SurfaceHolder.Callback.surfaceDestroyed()之間有效時觸及底層Surface。
+0

如果你看一下LunarLander例如SurfaceView具有其中有一個叫doDraw()函數,它繪製在畫布線程(稱爲LunarThread)。我的問題是移動doDraw函數(從線程)到SurfaceView類並從線程調用函數是否有任何區別,如:MySurfaceView.doDraw(); – blejzz 2011-06-06 21:30:19

+0

@jerenj doDraw()函數只是爲了保持圖形實現分離並提高可讀性,因爲它不會在其中創建任何新線程。關於創建一個'MySurfaceView.doDraw()'方法,我認爲將它與SurfaceHolder保持同步將會非常麻煩。爲什麼重新發明輪子? – Aleadam 2011-06-06 21:41:29

+0

那麼就像LunarLander那樣做呢?謝謝 – blejzz 2011-06-06 21:54:56

相關問題