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?
5
A
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
- 1. ¿Debo llamar a Graphics.Dispose()?
- 2. ¿debo llamar a close() después de urllib.urlopen()?
- 3. ¿Cuándo debo llamar a setNeedsDisplay en iOS?
- 4. ¿Debo llamar a Dispose() en objetos administrados?
- 5. ¿Debo llamar a MessageDigest.reset() antes de usarlo?
- 6. Botón y GLSurfaceView
- 7. surfaceview + glsurfaceview + framelayout
- 8. Pinch-zoom con GLSurfaceView
- 9. ¿Debo llamar a super() o llamar a this() para los constructores de vista personalizada de Android?
- 10. ¿Debo llamar a Close() en un evento ManualReset?
- 11. ¿Cómo debo llamar a Perl Script en Java?
- 12. ¿Cuándo debo llamar a este método Runtime.getRuntime(). AddShutdownHook()
- 13. ¿Debo llamar a DestroyIcon si lo hice con LoadIconWithScaleDown?
- 14. ¿Cuándo debo llamar a mainloop en una aplicación Tkinter?
- 15. ¿Debo llamar a ReleaseIntArrayElements en una matriz creada con NewIntArray?
- 16. ¿Debo llamar a SuspendLayout para cada control de niño?
- 17. ¿Debo llamar a EndInvoke después de un tiempo de espera?
- 18. Cuándo debo llamar a close() en SQLiteOpenHelper utilizado por ContentProvider
- 19. Mezclando Android Views y GLSurfaceView
- 20. ¿Cuándo debo llamar - [UIViewController initWithNibName: bundle:]?
- 21. Android glSurfaceView con superposición utilizando XML/Java
- 22. Android GLSurfaceView causa una fuga?
- 23. android glsurfaceview null puntero excepción
- 24. ¿Debo llamar explícitamente al destructor virtual base?
- 25. captura de pantalla de mapa de bits a GLSurfaceView
- 26. Android: Decidir entre SurfaceView y OpenGL (GLSurfaceView)
- 27. (Android MediaPlayer) ¿Cómo se supone que debo llamar a setAudioStreamType() si MediaPlayer.create() llama implícitamente a prepare()?
- 28. ¿Debo llamar tanto a unbindService como a StopService para servicios de Android?
- 29. ¿Se supone que debo llamar a EntityManager.clear() a menudo para evitar fugas de memoria?
- 30. Diferencia entre SurfaceView y GLSurfaceView en Android
¿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
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