6
我已经创建了一个动态壁纸。LiveWallpaper:java.lang.IllegalStateException:Surface已经发布
它工作正常,但如果我想在屏幕上长按,然后我去动态壁纸,并在预览中打开我的动态壁纸,然后壁纸破坏。
我得到了一个例外:java.lang.IllegalStateException: Surface has already been released
。
我已经创建了一个动态壁纸。LiveWallpaper:java.lang.IllegalStateException:Surface已经发布
它工作正常,但如果我想在屏幕上长按,然后我去动态壁纸,并在预览中打开我的动态壁纸,然后壁纸破坏。
我得到了一个例外: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()
。这可能不是正确的做法,但它对我有用。
发表您的代码.. –