Android lockCanvas()在一个设备上返回画布,但在另一个设备上返回null

时间:2016-07-22 16:27:24

标签: java android

我有以下代码:

public void messageReceived(String message) {
    ...
    ...
    synchronized (getHolder()) {
        if(isCreated) {
             Canvas canvas = getHolder().lockCanvas();
             if (canvas != null) {
                   draw(canvas);
                   getHolder().unlockCanvasAndPost(canvas);
             }
        }
    }
    ...
    ...
}

问题在于:在我的HTC Desire(Android 4.1.2)上,方法getHolder().lockCanvas()返回画布,然后我用它来绘制画面上的东西。但是在我的朋友智能手机(Android 4.2.2)上,它返回null,因此我无法在其上绘制。任何想法?

修改 为了确保我已经改变了一些代码:

synchronized (getHolder()) {
    if(isCreated && !isLocked) {
        Canvas canvas = getHolder().lockCanvas();
        isLocked = true;
        if (canvas != null) {
                draw(canvas);
                getHolder().unlockCanvasAndPost(canvas);
                isLocked = false;
        }
    }
}

isCreated和isLocked是公共静态布尔值。

1 个答案:

答案 0 :(得分:0)

我弄清楚了,我制作了canvas public static属性并且它可以工作!!

if(isCreated) {
    synchronized (getHolder()) {
        if(canvas == null)
             canvas = getHolder().lockCanvas();
             if (canvas != null) {
                 draw(canvas);
                 getHolder().unlockCanvasAndPost(canvas);
                 canvas = null;
             }
        }
}