2013-12-18 15 views

Antwort

5

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.

Verwandte Themen