我正在使用SurfaceView和一个线程进行游戏 . 在主线程中,我从SurfaceHolder锁定画布,然后解锁画布并发布锁定时获得的相同画布 . 当我重新启动游戏时,使用简单的意图,我收到以下错误消息:

java.lang.IllegalArgumentException: canvas object must be the same instance that was previously returned by lockCanvas
        at android.view.Surface.unlockSwCanvasAndPost(Surface.java:370)
        at android.view.Surface.unlockCanvasAndPost(Surface.java:363)
        at android.view.SurfaceView$3.unlockCanvasAndPost(SurfaceView.java:1089)
        at com.my.app.MainThread.run(MainThread.java:61)

这是我的代码:

Log.d(TAG, "Locking canvas!");
canvas = this.surfaceHolder.lockCanvas();

synchronized (surfaceHolder) {
    this.gameView.update(millitime);
    if(canvas != null)
        this.gameView.draw(canvas);
}
if(canvas != null) {
    Log.d(TAG, "Unlocking canvas!");
    this.surfaceHolder.unlockCanvasAndPost(canvas);
} else {
    Log.d(TAG, "Canvas is null!");
}

有什么问题?我确实返回相同的画布,但编辑 . 这样问题不对吗?谢谢!

顺便说一句,我看过这篇文章:Canvas object must be the same instance that was previously returned by lockCanvas但在那个问题中,SurfaceHolder.unlockAndPost在if(canvas!= null)之外 .