2011-02-06 15 views
5

RENDERMODE_WHEN_DIRTY içinde bir GLSurfaceView (SD sürüm 7) kullanıyorum. Belgeler, onPause/onResume'u çağırmam gerektiğini söylüyor, ama bu olmadan gayet iyi çalışıyor, bu yüzden merak ediyorum. Gerekli mi? Yapmazsam ne olur?GLSurfaceView: OnPause/onResume'i çağırmalı mıyım?

+0

Uygulamadan çıkıp geri döndüğünüzde bile iyi çalışıyor mu? GlSurfaceView'ı uygulamadan çıktıktan ve uygulamaya döndükten sonra çalışmaya devam edebilmem için her zaman, OnPause ve onResume'yi uygulama gereği duydum. – Nitrex88

+0

Evet, bu, her koşulda iyi çalışıyor: ana ekran geri dönüşü, ekran kapama-açma-geri dönüşü, odağı kaybetme ve geri dönme. Birkaç hafta boyunca iyi çalışıyor ve belgelerindeki onPause yazılarını okudum, bu yüzden merak ediyorum. – ADB

cevap

10

GLSurfaceView en OnPause uygulanması şuna benzer:

/** 
* 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(); 
} 

görebilirsiniz (ve belgelerine durumları) bu render iplik durakladığı.

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

bunu görebilirsiniz pahalı bir sistem kaynaktır yüzeyini tahrip ve ayrıca sistem kaynakları korunmasını sağlar) (beklenecek parçacığı neden olur: Bu şuna benzer stopEglLocked için GLTHREAD'ın bir iç çağrısı neden olur Bu nedenle, GLSurfaceView'un onPause ve onResume'yi çağırmak kesinlikle gereklidir.

İlgili konular