gpt4 book ai didi

java - unlockCanvasAndPost 中的 IllegalArgumentException(安卓动态壁纸)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:33:17 24 4
gpt4 key购买 nike

我已经创建了我的第一个动态壁纸,它在一个单独的线程中实现绘图。所以现在我有一个 WallpaperService 和我的 WallpaperPainter 来完成这项工作。问题是我在某些设备上的 unlockCanvasAndPost 方法中得到了 IllegalArgumentException(Samsung Note 就是一个)。我已经阅读了我能找到的所有建议,但无法修复该错误。似乎在表面被破坏时调用了 unlockCanvasAndPost,因此 Canvas 无效。以下是代码的基本部分:

在墙纸服务中:

    @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 Failed,这意味着它没有解锁缓冲区。在this.surfaceHolder.unlockCanvasAndPost(c);
之后你可以追加
this.surfaceHolder.lockCanvas();
(对不起,我的英语水平很差)

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com