2011-02-06 8 views
5

Estoy usando GLSurfaceView (versión sdk 7) en RENDERMODE_WHEN_DIRTY. La documentación dice que necesito llamar a Pause/onResume, pero funciona bien sin él, así que me pregunto. ¿Es requerido? ¿Qué puede pasar si no?GLSurfaceView: ¿Debo llamar a OnPause/onResume?

+0

¿funciona bien incluso cuando abandona la aplicación y la devuelve? Siempre he necesitado implementar onPause y onResume para mantener el funcionamiento de GlSurfaceView después de salir y regresar a la aplicación. – Nitrex88

+0

Sí, eso funciona bien en todas las condiciones: regreso a la pantalla de inicio, pantalla de cambio apagado-desbloqueo-retorno, perder foco y luego regresar. Ha estado funcionando bien durante un par de semanas y acabo de leer las cosas de Pausa en la documentación, así que me pregunto. – ADB

Respuesta

10

La implementación de onPause de GLSurfaceView se parece a esto:

/** 
* Inform the view that the activity is paused. The owner of this view must 
* call this method when the activity is paused. Calling this method will 
* pause the rendering thread. 
* Must not be called before a renderer has been set. 
*/ 
public void onPause() { 
    mGLThread.onPause(); 
} 

Se puede ver (y la documentación de los estados) que detiene el hilo de renderizado. Esto hace que una llamada interna en el GLTHREAD a stopEglLocked que se parece a esto:

private void stopEglLocked() { 
     if (mHaveEgl) { 
      mHaveEgl = false; 
      mEglHelper.destroySurface(); 
      mEglHelper.finish(); 
      sGLThreadManager.releaseEglSurface(this); 
     } 
} 

Así se puede ver que destruye la superficie, que es un recurso costoso sistema, y ​​hace que el hilo que esperar(), que también ahorra recursos del sistema , cpu, baterry, etc.

Entonces, definitivamente se requiere llamar a onPause y onResume de GLSurfaceView.

Cuestiones relacionadas