Android OpenGL ES 应用崩溃重新登录
Android OpenGL ES app crashes logging back in
我在 Android 上使用 OpenGL ES 2.0 制作基本游戏。我发现如果在存在 GLSurfaceView 时按下设备(模拟器或真实设备)上的主页键,然后从 Android 主屏幕重新登录到应用程序,应用程序将会崩溃。相反,如果我在 GLSurfaceView 存在时按下后退键,然后将我带回到我的 MainActivity / MainView,那么一切都很好。我认为这与 GL 线程的管理方式有关,当我立即关闭应用程序时,状态会被保存,而不是像我点击后退按钮转到我的 MainActivity 时那样从 activity 堆栈中弹出.
我的问题是我应该如何最好地处理破坏 GLSurfaceView 状态信息?如果用户按下主页键,我希望信息重置并且不被保存。我应该在实现 GLSurfaceView.Renderer 的 class 中覆盖 onStop 并删除 GLSL 程序吗?
我可以大致描述一下我的活动是如何在下面列出的。
主要活动class:
public MainActivity extends Activity
GameView view;
public onCreate ( ... ) { }
游戏视图class:
public GameView extends GLSurfaceView
Renderer renderer;
public onCreate (...) { // set EGL information and renderer };
渲染器class:
public Renderer implements GLSurfaceView.Renderer
// implements the surface change, created, and draw methods
确保您的 android 版本支持 OpenGL ES 2.0 渲染其背景状态。因为每当您按下主页键应用程序进入后台状态并为您的应用程序提供后台线程时,这可能会导致崩溃。大多数情况下,在 iOS 和 android 中,最好识别应用程序状态并在后台状态下暂停渲染。进一步参考 link Run Android OpenGL in Background as Rendering Resource for App?
我发现我需要覆盖扩展 GLSurfaceView 的 class 中的 'onSurfaceDestroyed(SurfaceHandle handle) 方法并清理我的资源。
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
super.surfaceDestroyed(holder);
ResourceManager.getInstance().cleanUp();
}
我在 Android 上使用 OpenGL ES 2.0 制作基本游戏。我发现如果在存在 GLSurfaceView 时按下设备(模拟器或真实设备)上的主页键,然后从 Android 主屏幕重新登录到应用程序,应用程序将会崩溃。相反,如果我在 GLSurfaceView 存在时按下后退键,然后将我带回到我的 MainActivity / MainView,那么一切都很好。我认为这与 GL 线程的管理方式有关,当我立即关闭应用程序时,状态会被保存,而不是像我点击后退按钮转到我的 MainActivity 时那样从 activity 堆栈中弹出.
我的问题是我应该如何最好地处理破坏 GLSurfaceView 状态信息?如果用户按下主页键,我希望信息重置并且不被保存。我应该在实现 GLSurfaceView.Renderer 的 class 中覆盖 onStop 并删除 GLSL 程序吗?
我可以大致描述一下我的活动是如何在下面列出的。
主要活动class:
public MainActivity extends Activity
GameView view;
public onCreate ( ... ) { }
游戏视图class:
public GameView extends GLSurfaceView
Renderer renderer;
public onCreate (...) { // set EGL information and renderer };
渲染器class:
public Renderer implements GLSurfaceView.Renderer
// implements the surface change, created, and draw methods
确保您的 android 版本支持 OpenGL ES 2.0 渲染其背景状态。因为每当您按下主页键应用程序进入后台状态并为您的应用程序提供后台线程时,这可能会导致崩溃。大多数情况下,在 iOS 和 android 中,最好识别应用程序状态并在后台状态下暂停渲染。进一步参考 link Run Android OpenGL in Background as Rendering Resource for App?
我发现我需要覆盖扩展 GLSurfaceView 的 class 中的 'onSurfaceDestroyed(SurfaceHandle handle) 方法并清理我的资源。
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
super.surfaceDestroyed(holder);
ResourceManager.getInstance().cleanUp();
}