2011-02-06 16 views
5

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?

+0

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

+0

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

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