Sto usando un GLSurfaceView (versione sdk 7) in RENDERMODE_WHEN_DIRTY. La documentazione dice che devo chiamare onPause/onResume, ma funziona senza di esso, quindi mi chiedo. È richiesto? Cosa può succedere se non lo faccio?GLSurfaceView: Devo chiamare onPause/onResume?
5
A
risposta
10
L'attuazione di onPause di GLSurfaceView assomiglia a questo:
/**
* 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();
}
Si può vedere (e la documentazione stati) che mette in pausa il thread di rendering. Questo fa sì che una chiamata interna in GLTHREAD a stopEglLocked che assomiglia a questo:
private void stopEglLocked() {
if (mHaveEgl) {
mHaveEgl = false;
mEglHelper.destroySurface();
mEglHelper.finish();
sGLThreadManager.releaseEglSurface(this);
}
}
Così si può vedere che distrugge la superficie, che è una risorsa del sistema costoso, e provoca filo aspettare(), che consente di risparmiare anche le risorse di sistema , cpu, baterry, ecc.
Quindi, è necessario chiamare la funzione onPause e onResume di GLSurfaceView.
Problemi correlati
- 1. Devo chiamare Graphics.Dispose()?
- 2. Devo chiamare File.Exists prima di chiamare File.Delete?
- 3. Devo chiamare "makefile" o "Makefile"?
- 4. GLSurfaceView in a PopupWindow
- 5. Pinch-zoom con GLSurfaceView
- 6. Android GLSurfaceView causa perdite?
- 7. Minimizzare Android GLSurfaceView lag
- 8. Button e GLSurfaceView
- 9. Devo chiamare EndInvoke dopo un timeout?
- 10. MemoryStream nell'utilizzo dell'istruzione - Devo chiamare close()
- 11. Devo mai chiamare dispatch_release sotto ARC?
- 12. Devo chiamare HttpURLConnection.disconnect dopo averlo terminato usando
- 13. Devo chiamare Stop prima di leggere ElapsedMilliseconds?
- 14. Devo chiamare addSubview dopo aver chiamato addChildViewController?
- 15. Devo chiamare Close() su un ManualResetEvent?
- 16. Devo chiamare SuspendLayout per ogni controllo figlio?
- 17. Perché devo chiamare spyOn in beforeAach()?
- 18. Quando devo chiamare setNeedsDisplay in iOS?
- 19. Devo chiamare MessageDigest.reset() prima di usarlo?
- 20. Android GLSurfaceView con sfondo drawable
- 21. GLSurfaceView - come rendere sfondo traslucido
- 22. android glsurfaceview null pointer exception
- 23. Android: decidere tra SurfaceView e OpenGL (GLSurfaceView)
- 24. Registrazione video Android della superficie OpenGL (GLSURFACEVIEW)
- 25. Miscelazione di viste Android e GLSurfaceView
- 26. Come aggiungere GLSurfaceView tra le viste Android?
- 27. Android GLSurfaceView sfondo trasparente senza setZOrderonTop
- 28. Android glSurfaceView con overlay usando XML/Java
- 29. Disegno Android UI in cima GLSurfaceView
- 30. Devo chiamare EntityManager.clear() spesso per evitare perdite di memoria?
funziona correttamente anche quando si esce dall'applicazione e si ritorna? Ho sempre avuto bisogno di implementare onPause e onResume per mantenere il GlSurfaceView funzionante dopo aver lasciato e tornare all'applicazione. – Nitrex88
Sì, funziona bene in tutte le condizioni: schermata iniziale-ritorno, cambio schermo off-unlock-return, perdita di messa a fuoco, quindi ritorno. Sta funzionando bene da un paio di settimane e mi è capitato di leggere la documentazione onPause nella documentazione, quindi mi chiedo. – ADB