Обратные вызовы Android OpenGL SurfaceHolder

В документах Android указано, что для surfaceCreated surfaceChanged и surfaceDestroyed:

Этот метод является частью интерфейса SurfaceHolder.Callback и обычно не вызывается и не подклассируется клиентами GLSurfaceView.

Однако они вызываются в моем приложении (OpenGL ES 2.0).

Это порядок вещей в моем приложении

Приложение запущено

  • поверхностьСоздать
  • поверхность изменена
  • onSurfaceCreated

Теперь я нажимаю клавишу "Домой" перед вызовом onSurfaceChanged, поэтому приложение теперь находится в фоновом режиме

  • поверхностьРазрушенный
  • onSurfaceChanged

Итак, как видите, согласно вышеизложенному, поверхность разрушается, а затем изменяется - очевидно, это невозможно.

Приложение работает нормально. Затем я могу снова запустить его, и все работает.

Я просто немного смущен. Я предполагаю, что surfaceCreated, surfaceChanged и surfaceDestroyed вызываются, но не влияют на мой GLSurfaceView.

Кто-нибудь может подтвердить, что это так?


person Zippy    schedule 30.07.2014    source источник


Ответы (1)


Я думаю, вы могли неправильно понять документацию. Это не говорит о том, что эти методы не вызываются. С акцентом добавлено:

обычно не вызывается и не подклассируется клиентами GLSurfaceView

Это говорит вам о том, что если вы используете класс GLSurfaceView, который делает вас клиентом, вы не должны вызывать эти методы. Кроме того, если вы создаете подкласс GLSurfaceView, они не рекомендуют переопределять эти методы.

Другими словами, эти методы предназначены для внутреннего использования. Они вызываются, но обычно вы должны предоставить GLSurfaceView возможность обработки вызовов. Как пользователь GLSurfaceView, вы не должны вообще беспокоиться об этих методах и использовать рекомендуемые и хорошо задокументированные методы, когда создаете подкласс GLSurfaceView и взаимодействуете с экземплярами GLSurfaceView.

person Reto Koradi    schedule 31.07.2014
comment
Другими словами: GLSurfaceView — это SurfaceView с некоторым вспомогательным кодом, обернутым вокруг него. Это действительно должно быть частью библиотеки поддержки, а не смешиваться с классами фреймворка. Если вы украдете обратные вызовы из реализации GLSurfaceView, у вас будут плохие времена. См. также source.android.com/devices/graphics/architecture.html . - person fadden; 01.08.2014