Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
API 15及更高版本中OpenGL Android应用程序的配置更改_Android_Opengl Es - Fatal编程技术网

API 15及更高版本中OpenGL Android应用程序的配置更改

API 15及更高版本中OpenGL Android应用程序的配置更改,android,opengl-es,Android,Opengl Es,我正在用OpenGL编写一个android游戏。不久前,我已经涉猎了一些东西,我开始处理活动暂停/恢复和OpenGL上下文丢失的问题,因为我知道这是一个棘手的问题。到目前为止,如果我按下电源按钮,然后重新启动,我的应用程序就会重新启动,并出现各种问题,比如空纹理。因为从零开始恢复应用程序的状态在我的情况下是太多的工作了(有一堆线程,复杂的人工智能状态,我没有考虑到这一点,诸如此类的事情),我想我会放弃姜饼兼容性,从冰淇淋三明治开始(API级别15),添加 在清单中,只需处理还原OpenGL的所有

我正在用OpenGL编写一个android游戏。不久前,我已经涉猎了一些东西,我开始处理活动暂停/恢复和OpenGL上下文丢失的问题,因为我知道这是一个棘手的问题。到目前为止,如果我按下电源按钮,然后重新启动,我的应用程序就会重新启动,并出现各种问题,比如空纹理。因为从零开始恢复应用程序的状态在我的情况下是太多的工作了(有一堆线程,复杂的人工智能状态,我没有考虑到这一点,诸如此类的事情),我想我会放弃姜饼兼容性,从冰淇淋三明治开始(API级别15),添加

在清单中,只需处理还原OpenGL的所有内容。但在我拉起袖子之前,我只是看看事情是如何发展的,我惊讶地发现一切都完美无瑕,没有任何变化:纹理、VBO。。。甚至音乐也在它停止的地方重放。我已经测试过它的断电事件和主页按钮。现在我在运行安卓4.4.2的Nexus5和Nexus7(2012)上看到了这一点,我不禁有点怀疑

以下是我希望一些安卓大师能回答的几个问题:

  • 这样可以吗?我的应用程序是否占用了后台的GPU资源并耗尽了电池之类的东西
  • 我能指望这在以前的Android版本上也能起作用吗?(我没有低于4.4.2的内容)

  • 我可以添加对配置更改的调用吗(mcc,mnc我看到这项工作的方式是,资源实际上是在睡眠/醒来后重新创建的,开发人员不必做很多事情来实现这一点。假设您使用的是OpenGL渲染的
    GLSurfaceView
    ,大致如下所示:

    然后,如中“活动生命周期”下所述,在活动中连接
    onPause()
    onResume()
    处理程序,以调用
    GLSurfaceView
    上的匹配方法

    我通常看到在睡眠/唤醒(包括在4.4.2下)后发生的情况是,
    GLSurfaceView.Renderer
    实现上的
    onSurfaceCreated()
    方法再次被调用。由于这是您通常创建OpenGL资源的地方,因此当设备在应用程序运行时唤醒时,它们实际上会被重新创建


    您可以尝试在
    onSurfaceCreated()
    中设置断点,看看它是否在您将设备从睡眠中唤醒后停止。

    这不可能是全部,因为我在远离onSurfaceCreated()的地方动态创建了很多内容,并且我重用了onPause()之前创建的内容。我担心的是,您描述的行为适用于部分或所有以前的版本(我的目标是4.0.3及更高版本)。或者,我可能错误地认为我的GL对象将在onPause()之后处理?不幸的是,GLSurfaceView文档在这个主题上并不是特别详细。我将继续挖掘,感谢您的输入。
    android:configChanges="orientation|screenSize"