我想为此再加上一个答案,这个答案是Chris Pruett(Replica Island,Wind-Up Knight等)传递给我一两年的。这在2013年特别有用,因为setPreserveEglContextOnPause(true)在4.3上似乎不起作用。(对此我可能是错的,但是当我更新2011年最后触及的游戏代码时,这就是现在的样子)。
基本上,诀窍是将您的GLSurfaceView从Activity的onPause()的视图层次结构中分离出来。由于onPause()运行时它不在视图层次结构中,因此上下文永远不会被破坏。
因此,您的Activity的onPause()应该如下所示:
@Override
public void onPause() {
view.setVisibility(View.GONE);
super.onPause();
...
}
然后,您不是从onResume()而是从onWindowFocusChanged()将GLSurfaceView还原到层次结构中:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && view.getVisibility() == View.GONE) {
view.setVisibility(View.VISIBLE);
}
...
}
请注意,您永远不会调用GLSurfaceView的onPause()和onResume(),并且这是官方的SDK GLSurfaceView,不需要经过修改的替代版本。