2011-02-06 25 views
5

RENDERMODE_WHEN_DIRTYにGLSurfaceView(sdkバージョン7)を使用しています。ドキュメントではonPause/onResumeを呼び出す必要があると書かれていますが、それがなければ正常に動作するので、私は疑問に思います。それは必要ですか?私がしなければどうなりますか?GLSurfaceView:onPause/onResumeを呼び出す必要がありますか?

+0

アプリケーションを終了して戻っても正常に動作しますか?私はいつも、アプリケーションを終了してから戻った後にGlSurfaceViewを動作させ続けるために、onPauseとonResumeを実装する必要がありました。 – 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を呼び出すことは間違いありません。

関連する問題