Android:lockCanvas()和lockCanvas(null)之间有什么区别?

Bri*_*erg 2 android surfaceview

标题说得很清楚,虽然我会给出一个代码示例以防万一.这来自Android SDK中的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);
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

lockCanvas()必须重新绘制所有像素的文档,而lockCanvas(Rect dirty)表示您只需要重新绘制像素dirty.我看到了传递null给这个函数的两种可能的解释:它不需要重新绘制任何像素,或者行为方式与之相同lockCanvas().

log*_*cat 5

它是开源的

public Canvas lockCanvas() {
  return internalLockCanvas(null);
}
public Canvas lockCanvas(Rect dirty) {
  return internalLockCanvas(dirty);
}
Run Code Online (Sandbox Code Playgroud)

  • 好点子; 我现在要爬进耻辱的盒子里. (4认同)