SurfaceView の使用例はすべて、ビジー ループを実行する run メソッドを使用しているようです。それはこれを行う有効な方法ですか?私が見ることができるすべてのコードは、月着陸船のサンプルからのこのパラダイムに従っています。ただし、ビジーな while ループを作成することは、マルチスレッド アプリをコーディングするための奇妙な方法のようです。描画コードが描画コマンドのキューなどで待機するべきではありません。私はそれをそのように実装したでしょうが、以下のようなコードの量が私に質問をさせます.SurfaceViewでスレッドを描画するための最良のセマンティクスは何ですか.
public void run() {
while (mRun) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
// DO DRAWING HERE
}
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}