android - 调用 GLSurfaceView.onPause() 后 Activity 暂停超时

标签 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”行,我得到一个 Activity 暂停超时。

我没有覆盖 GLSurfaceView 类中的 onPause... 据我所知,这已经为我工作了一段时间,但最近开始出现,因为我第二次尝试时开始出现完全黑屏运行我的游戏,直到最终收到 ANR。我的游戏有 95% 是本地运行的。与 San Angeles 示例类似,Renderer 调用 onDraw,例如调用 NativeDraw 函数而不是 java.lang. onSurfaceCreated、onSurfaceChanged也是如此,我也在逻辑线程中调用了一个原生的GameLogic方法(基本上调用的都是线程sleep和那个逻辑方法。)

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

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

最佳答案

好吧,我只是自己回答这个问题,因为该解决方案非常适合我自己的代码,以至于没有人能够做到。

如果您在 native 端分配了内存,请注意不要释放它,直到您确定没有其他代码会尝试访问它。

关于android - 调用 GLSurfaceView.onPause() 后 Activity 暂停超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6323911/

相关文章:

android - 对齐 editText 中的文本 center_vertical 未准确显示

javascript - Three.js - 网格、三 Angular 形和 Lambert Material

android - OpenSceneGraph 集成到 Qt Quick 中

android - 将 android 平板电脑上的 opengl\game 的 fps 提高到 60 以上

c++ - 是否可以在 ARC 中使用 native C++ 代码?

Android NDK open() 设备权限被拒绝

java - Android 应用程序仅安装一次

android map Activity map 标题不显示

java - 如何在Android(NDK r20)上修复(process_begin : CreateProcess(NULL, "",...)失败。)?

android - 如何将我的 Android 应用程序提供到我的网站以供用户下载