我创建了我的第一个动态壁纸,它在单独的线程中实现了绘图。因此,现在我有了WallpaperService,而我的WallpaperPainter负责这项工作。问题是我在某些设备上以IllegalArgumentException方法获取了unlockCanvasAndPost(三星Note是其中之一)。我已经阅读了所有可以找到的建议,但无法修复该错误。似乎在销毁表面以使 Canvas 无效时调用了unlockCanvasAndPost。这是代码的基本部分:

在墙纸服务中:

    @Override
    public void onSurfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        super.onSurfaceChanged(holder, format, width, height);
        painting.setSurfaceSize(width, height);
    }

    @Override
    public void onSurfaceCreated(SurfaceHolder holder) {
        super.onSurfaceCreated(holder);
        painting.start();
    }

    @Override
    public void onSurfaceDestroyed(SurfaceHolder holder) {
        boolean retry = true;
        painting.stopPainting();
        while (retry) {
            try {
                painting.join();
                retry = false;
            } catch (InterruptedException e) { }
        }
        super.onSurfaceDestroyed(holder);
    }

在绘画线程中:
public void stopPainting() {
    this.run = false;
    synchronized(this) {
        this.notify();
    }
}

public void run() {
    this.run = true;
    Canvas c = null;
    while (run) {
        try {
            synchronized (this) {
                Thread.sleep(50);
                c = this.surfaceHolder.lockCanvas();
                doDraw(c);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            if (c != null) {
                this.surfaceHolder.unlockCanvasAndPost(c); // << -- HERE IS THE PROBLEM
            }
        }
        // if pause...
        synchronized (this) {
            if (wait) {
                try {
                    wait();
                } catch (Exception e) { }
            }
        }
    }
}

谁能给我任何提示我做错了什么?我是Java和Android的新手。

最佳答案

如果错误是:UnlockAndPost失败,则表示它未解锁任何缓冲区。this.surfaceHolder.unlockCanvasAndPost(c);之后
你可以追加this.surfaceHolder.lockCanvas();(对不起,我的英语水平很差)

关于java - UnlockCanvasAndPost中的IllegalArgumentException(Android动态壁纸),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12758703/

10-10 04:35