11 Stimmen

Android -- GLSurfaceView EGL_BAD_ALLOC

Mein Programm schaltet zwischen zwei Activities die jeweils eine abgeleitete GLSurfaceView die VBOs verwendet. Nachdem ein paar Mal zwischen den beiden Activities hin- und hergeschaltet wurde, stürzt das Programm ab und löst die folgende Ausnahme aus. Bei jedem Kontextwechsel werden die VBO-Puffer gelöscht, onStop() wird aufgerufen und eine neue Instanz der nächsten Activity's GLSurfaceView aufgeblasen ist. Ich habe das Programm so umgestaltet, dass es nur mit einem GLSurfaceView y Activity und das Programm scheint ohne Probleme zu laufen. Es werden nur Polygone und Farben verwendet, keine Texturen. Hier ist der Schaden:

Java.lang.RuntimeException: createContext failed: EGL_BAD_ALLOC
   at android.opengl.GLSurfaceView$EglHelper
      .throwEglException(GLSurfaceView.java:1079)
   at android.opengl.GLSurfaceView$EglHelper
      .throwEglException(GLSurfaceView.java:1071)
   at android.opengl.GLSurfaceView$EglHelper
      .start(GLSurfaceView.java:927)
   at android.opengl.GLSurfaceView$GLThread
      .guardedRun(GLSurfaceView.java:1248)
   at android.opengl.GLSurfaceView$GLThread
      .run(GLSurfaceView.java:1118)

Eine Internetrecherche hat ergeben, dass es sich um eine erkannter Fehler . Wie kann ich also Schadensbegrenzung betreiben? +200 für einen Schubs in die richtige Richtung.

EDIT: ICH HABE DAS PROBLEM GELÖST (ICH HABE VERGESSEN, ONPAUSE() / ONRESTART() IN DEN ANSICHTEN AUFZURUFEN). DIE ERSTE PERSON, DIE EINE ANTWORT AUF IRGENDETWAS GIBT, BEKOMMT +200.

18voto

zennehoy Punkte 6325

Leider kann ich noch keinen Kommentar abgeben, aber ich glaube, Sie meinen onResume und nicht onRestart. Ihre Aktivität kann pausiert werden, ohne dass sie gestoppt wird, was onPause, aber nicht onRestart auslösen würde.

Dieses Bild (aus der Dokumente zur Tätigkeit ) zeigt diesen Lebenszyklus der Aktivität sehr schön:

http://developer.android.com/images/activity_lifecycle.png

Kurz gesagt, denken Sie daran, onPause und onResume sowohl an Ihr Super als auch an die GLSurfaceView zu übergeben.

En http://Android-developers.blogspot.com/2009/04/introducing-glsurfaceview.html :

public class ClearActivity extends Activity {
    ... snip ...

    @Override
    protected void onPause() {
        super.onPause();
        mGLView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mGLView.onResume();
    }

    private GLSurfaceView mGLView;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X