念のためコード例を示しますが、タイトルはそれを非常に明確に示しています。これは、AndroidSDKのLunarLanderサンプルからのものです。
@Override
public void run() {
while (mRun) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
if (mMode == STATE_RUNNING) updatePhysics();
doDraw(c);
}
} finally {
// do this in a finally so that if an exception is thrown
// during the above, we don't leave the Surface in an
// inconsistent state
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
のドキュメントにlockCanvas()
は、すべてのピクセルを再lockCanvas(Rect dirty)
描画する必要があると記載されていますが、でピクセルを再描画するだけでよいと記載されていますdirty
。この関数に渡すことについて考えられる解釈は2つnull
あります。ピクセルを再描画する必要がないか、と同じように動作しlockCanvas()
ます。