0

请任何人帮助我解释以下内容。

如何正确调用holder.unlockCanvasAndPost(canvas)方法以避免出现“Surface:unlockCanvasAndPost failed, no locked buffer”之类的错误?

我的意思是,有什么方法可以检查画布之前是否已被锁定?

目前,我有:

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;
            }
        };
    };

例如,当当前和下一个图像产生淡入/淡出效果时,我可以在主线程中实现双击以立即更改图像,有时会在画布解锁之前强制停止循环。

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

再次,提前感谢任何和所有的答复。

4

0 回答 0