Ответ 1
OpenGL может быть потерян только после вызова Actvity:: onPause() и только в этом случае. См. Документацию setPreserveEGLContextOnPause:
Фактически сохраняется ли контекст EGL или нет, зависит от того, поддерживает ли устройство Android, на котором работает программа, произвольное количество контекстов EGL или нет. Устройства, которые могут поддерживать только ограниченное количество контекстов EGL, должны освобождать контекст EGL, чтобы позволить нескольким приложениям делиться графическим процессором. [...] контекст EGL [может быть] выпущен, когда GLSurfaceView приостановлен, и воссоздается, когда GLSurfaceView возобновляется.
EDIT: Ситуация, описанная в документации, действительна для всех версий Android. Неважно, что у вас есть доступ к setPreserveEGLContextOnPause
На мой взгляд, это один из главных недостатков реализации Android OGLES: вы не можете быть уверены.
Документация сама по себе является неопределенной (EGL Context Lost note):
Бывают ситуации, когда контекст рендеринга EGL будет потерян. Обычно это происходит, когда устройство просыпается после сна.
Я заметил такое же поведение, как и кнопка "Домой" и "Назад". Звонки - это не совсем те же самые (но не помню их точно).
Единственный способ убедиться, что контекст OpenGL доступен, - это создать все ресурсы OpenGL в onSurfaceCreated
Обратите внимание на setPreserveEGLContextOnPause. Еще раз, этот комментарий к документации демонстрирует "случайное" поведение разрушения контекста:
Если установлено значение true, контекст EGL может быть сохранен, когда GLSurfaceView приостановлен. [...]