我正在使用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)之外 .