【问题标题】:Android GLSurfaceView 2.x SDK preserve context. Is destroyed when screen turns offAndroid GLSurfaceView 2.x SDK 保留上下文。屏幕关闭时被破坏
【发布时间】:2025-12-06 01:00:02
【问题描述】:

我正在制作游戏。 不久前,我遇到了一个问题。我想为旧的 sdk 版本保留 GLSurfaceView 的 GLContext 。 我通过获取 GlSurfaceView 的最新源并将其放入我的项目中解决了这个问题。只需要一点点修复:gles 2.0 版本检查。

效果几乎很好。但是!

在 android 版本 2.x.x 上,当应用程序的屏幕调整被破坏时,上下文和所有纹理随之发生。 有趣的事情:如果我按下主页按钮,应用程序将进入后台并且屏幕转动它不会被破坏,但如果我在前台运行时转动屏幕,它肯定会被破坏。

我尝试了不同的方法来避免这种情况。

  1. 我已尝试按照副本岛开发人员的建议分离上下文和表面线程。但没什么好。它总是重新加载纹理。

  2. 我已尝试按照此处的建议在 onDestroy 中分离视图:Attach/detach Android view to/from layout,但也没有任何好处。

  3. 我尝试使用 FLAG_SHOW_WHEN_LOCKED。但是当屏幕打开时,储物柜屏幕不会出现。它会在按下主页按钮时显示。一点都不好。

  4. 我尝试在调用恢复时将应用程序发送到后台,然后使用 BroadcastReceiver 将其置于前台,但它始终被置于前台(即使它在后台)。如果它被系统破坏了,它根本不会显示出来。

不知道该怎么办。可能是我的手机资源不足,但我尝试过其他游戏,它们运行良好。无需长时间重新加载即可恢复自身。

【问题讨论】:

    标签: android destroy glsurfaceview


    【解决方案1】:

    我不敢相信。这太愚蠢了。根据这个线程Problems understanding the life cycle when screen goes off and on你必须添加

    <activity ... android:configChanges="orientation" ... >
    

    所以当你关闭屏幕时应用程序不会被旋转然后销毁。

    【讨论】: