私はライブ壁紙を作成しました。LiveWallpaper:java.lang.IllegalStateException:サーフェスは既に公開されています
これはうまくいきますが、画面を長押ししてライブ壁紙に行ってプレビューでライブ壁紙を開くと壁紙が壊れてしまいます。
私は例外を受け取ります:java.lang.IllegalStateException: Surface has already been released
。
私はライブ壁紙を作成しました。LiveWallpaper:java.lang.IllegalStateException:サーフェスは既に公開されています
これはうまくいきますが、画面を長押ししてライブ壁紙に行ってプレビューでライブ壁紙を開くと壁紙が壊れてしまいます。
私は例外を受け取ります: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.isCreated()
がありsurfaceHolder.isCreating()
があるが、ありません。これは正しい方法ではないかもしれませんが、私のために働いています。
あなたのコードを投稿してください.. –