gpt4 book ai didi

android - 动态壁纸 : java. lang.IllegalStateException: Surface has already been released

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:25 36 4
gpt4 key购买 nike

我创建了动态壁纸。

它工作正常,但如果我想长按屏幕并转到动态壁纸并在预览中打开我的动态壁纸,之后壁纸就会变得困惑。

我得到异常:java.lang.IllegalStateException: Surface has already been released

最佳答案

如果没有您的代码很难判断,但我看到了这个异常,但只有当我在完成加载之前离开预览时才看到。

在我的例子中,这是因为我从 onSurfaceCreated 方法启动了一个 AsyncTask,但是当它到达我调用 surfaceHolder.lockCanvas()表面已经被破坏了。

为了解决这个问题,我重写了 onSurfaceDestroyed 方法,并为该类设置了一个名为 drawOk 的全局变量,如下所示:

    @Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
handler.post(reload);
drawOk = true;
}

@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
super.onSurfaceDestroyed(holder);
handler.removeCallbacks(reload);
drawOk = false;
}

@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
if(visible) {
handler.post(reload);
drawOk = true;
} else {
handler.removeCallbacks(reload);
drawOk = false;
}
}

private void draw() {

SurfaceHolder surfaceHolder = getSurfaceHolder();
Canvas canvas = null;

if(drawOk) {
canvas = surfaceHolder.lockCanvas();
if(canvas != null) {
// ...
}
}
}

surfaceHolder.isCreating(),但没有 surfaceHolder.isCreated()。这可能不是正确的方法,但它对我有用。

关于android - 动态壁纸 : java. lang.IllegalStateException: Surface has already been released,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665636/

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