Es ist schwer zu sagen ohne Ihren Code, aber ich sah diese Ausnahme, aber nur, wenn ich von der Vorschau weg navigiert, bevor es fertig geladen wurde.
In meinem Fall, es wurde verursacht, weil ich eine AsyncTask
weg von der onSurfaceCreated
Methode, aber dann durch die Zeit, es kam zu dem Punkt, wo ich surfaceHolder.lockCanvas()
hatte die Oberfläche bereits zerstört genannt gestartet.
das umgehen, ich overrode die onSurfaceDestroyed
Methode und hatte eine Variable global zu dieser Klasse drawOk
, wie folgt aufgerufen:
@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) {
// ...
}
}
}
Es gibt eine surfaceHolder.isCreating()
ist, aber kein surfaceHolder.isCreated()
. Das ist vielleicht nicht der richtige Weg, aber es funktioniert für mich.
poste deinen Code .. –