Android:如何避免unlockCanvasAndPost方法上的错误?

Android:如何避免unlockCanvasAndPost方法上的错误?,android,android-canvas,surfaceholder,Android,Android Canvas,Surfaceholder,请任何人帮我解释一下 如何正确调用holder.unlockCanvasAndPost(canvas)方法以避免出现类似“Surface:unlockCanvasAndPost失败,没有锁定的缓冲区”之类的错误 我是说,有没有办法检查画布以前是否被锁定过 目前,我有: try{ _surfaceHolder.unlockCanvasAndPost(canvasToUnlock); } catch(Throwable t){ } 但我想这是不合适的 提前谢谢 在@njzk2帖子上回答: 对。但在

请任何人帮我解释一下

如何正确调用holder.unlockCanvasAndPost(canvas)方法以避免出现类似“Surface:unlockCanvasAndPost失败,没有锁定的缓冲区”之类的错误

我是说,有没有办法检查画布以前是否被锁定过

目前,我有:

try{
_surfaceHolder.unlockCanvasAndPost(canvasToUnlock);
}
catch(Throwable t){ }
但我想这是不合适的

提前谢谢

在@njzk2帖子上回答:

对。但在我的例子中,我必须对处理程序说,当画布应该被锁定和解锁时,我用于从不同的线程解锁画布。我的意思是:

    class MyObject extends Object{
        private Canvas canvas = null;
        private SurfaceHolder holder = null;

        MyObject(SurfaceHolder sh, Canvas cv){
            canvas = cv;
            holder= sh;
        }

        public SurfaceHolder getHolder() {return holder;}
        public Canvas getCanvas() {return canvas;}
    };

    private final Handler mHandler = new Handler(){

        public void handleMessage(android.os.Message msg){
            MyObject myObject= (MyObject)msg.obj;

            switch(msg.what){
                case 1:
                    Canvas c = myObject.getCanvas();
                    c = myObject.getHolder().lockCanvas();
                    break;
                case 2:
                    myObject.getHolder().unlockCanvasAndPost(myObject.getCanvas());
                    break;
            }
        };
    };
例如,当使用当前和下一个图像生成淡入/淡出效果时,我可以实现从主线程双击以立即更改图像,有时会在画布解锁之前强制停止循环

因此,我需要通过知道它之前是否已解锁来防止意外锁定,反之亦然


再次感谢您的回复。

通常,它位于以
canvas.lock
开头的块的末尾,因此您知道它已被锁定。@njzk2我不知道如何插入带有此注释的复合答案,所以我只是用它更新了我的帖子。