2011-02-06 4 views
5

RENDERMODE_WHEN_DIRTY에서 GLSurfaceView (sdk 버전 7)를 사용하고 있습니다. 설명서에 onPause/onResume을 호출해야한다는 메시지가 있지만 제대로 작동하지 않으므로 궁금합니다. 필요한가요? 내가하지 않으면 어떻게 될까요?GLSurfaceView : onPause/onResume을 호출해야합니까?

+0

응용 프로그램을 종료하고 돌아올 때도 정상적으로 작동합니까? 나는 항상 onPause와 onResume을 구현하여 응용 프로그램을 떠나고 돌아온 후에 GlSurfaceView가 작동하도록 유지해야했습니다. – Nitrex88

+0

예, 모든 조건에서 정상적으로 작동합니다. 홈 화면 복귀, 전환 화면 해제 잠금 해제 복귀, 포커스 손실 후 복귀. 몇 주 동안 잘 돌아가고 있었고 설명서의 onPause 항목을 읽었을 때 궁금해졌습니다. – ADB

답변

10

GLSurfaceView의 onPause의 구현은 다음과 같습니다

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

당신이 볼 수있는 (그리고 문서 상태)는 렌더링 스레드를 일시 정지있다.

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

당신이 그것을 볼 수는 고가의 시스템 자원 표면을 파괴하고, 또한 시스템 자원을 절약 할 수) (기다리는 스레드의 원인이은 다음과 같습니다 stopEglLocked에 GLThread의 내부 전화를 야기 , cpu, baterry 등등.

따라서 GLSurfaceView의 onPause 및 onResume 호출은 반드시 필요합니다.

관련 문제