GLSurfaceView: нужно ли вызывать onPause / onResume? - PullRequest
5 голосов
/ 06 февраля 2011

Я использую GLSurfaceView (SDK версии 7) в RENDERMODE_WHEN_DIRTY. В документации сказано, что мне нужно вызвать onPause / onResume, но без него он работает нормально, поэтому мне интересно. Это обязательно? Что может случиться, если я этого не сделаю?

1 Ответ

11 голосов
/ 06 февраля 2011

Реализация onPause GLSurfaceView выглядит следующим образом:

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

Вы видите (и документация заявляет), что он приостанавливает поток рендеринга. Это вызывает внутренний вызов в GLThread для stopEglLocked, который выглядит следующим образом:

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

Таким образом, вы можете видеть, что он разрушает поверхность, которая является дорогим системным ресурсом, и заставляет поток ждать (), который также сохраняет системные ресурсы, процессор, аккумулятор и т. Д.

Итак, вызов GLSurfaceView onPause и onResume определенно необходим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...