调用GLSurfaceView.onPause()后活动暂停超时

时间:2011-06-12 18:51:11

标签: android opengl-es android-ndk

我有一个使用OpenGL的游戏。我已经建立了示例,大多数情况下,使用主线程,渲染器线程(GLSurfaceView.Renderer)并添加了一个GameLogic线程。当游戏执行时,一切似乎都完美无缺。当按下后退并触发onPause()时,我也会触发GLSurfaceView()的onPause,但此时我正在“崩溃”。这是MainActivity的onPause:

@Override
protected void onPause() {
    Log.d("Main", "Pre- Super onPause");
    super.onPause();
    Log.d("Main", "Post- Super onPause");
    mGSGLView.onPause();
    Log.d("Main", "Post- GL onPause");
}

到达除最后一个之外的每个日志点。在logcat中,紧跟在“Post Super onPause”行之后,我得到一个活动暂停超时。

我没有在GLSurfaceView类中覆盖onPause ...据我所知,这已经为我工作了一段时间,但最近开始发生的时候,我第二次尝试使用完全黑屏运行我的游戏,直到最终获得ANR。 95%的游戏本机运行。与San Angeles示例类似,Renderer调用onDraw,例如调用NativeDraw函数而不是java。对于onSurfaceCreated,onSurfaceChanged也是如此,我还在逻辑线程中调用了一个本机GameLogic方法(基本上所有这些都称为线程休眠和逻辑方法。)

我希望我已经提供了足够的信息,如果我还有其他什么要提供,请告诉我。

编辑 - 嗯......我实际上已经将问题缩小到本机函数调用,在那里我释放了以前使用malloc()为它们分配了内存的某些指针。我的代码看起来没问题,但是如果我省略了调用,一切正常,所以我的free()调用必须破坏某些东西......

1 个答案:

答案 0 :(得分:0)

好的,我只是自己回答这个问题,因为解决方案对我自己的代码来说是如此具体,以至于没有人能够做到这一点。

如果您在本机端分配了内存,请确保在确定没有其他代码尝试访问它之前不要将其释放。