gpt4 book ai didi

android - GLSurfaceView EGL_BAD_ALLOC

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:33 24 4
gpt4 key购买 nike

我的程序在两个 Activity 之间切换,每个 Activity 都会膨胀一个使用 VBO 的派生 GLSurfaceView

在两个Activity之间来回切换几次后,程序崩溃并抛出如下异常:

Java.lang.RuntimeException: createContext failed: EGL_BAD_ALLOC
at android.opengl.GLSurfaceView$EglHelper
.throwEglException(GLSurfaceView.java:1079)
at android.opengl.GLSurfaceView$EglHelper
.throwEglException(GLSurfaceView.java:1071)
at android.opengl.GLSurfaceView$EglHelper
.start(GLSurfaceView.java:927)
at android.opengl.GLSurfaceView$GLThread
.guardedRun(GLSurfaceView.java:1248)
at android.opengl.GLSurfaceView$GLThread
.run(GLSurfaceView.java:1118)

每次上下文切换时,VBO 缓冲区都会被删除,onStop() 会被调用,下一个 Activity 的 GLSurfaceView 的新实例会被扩充。

我将程序重构为仅在一个 GLSurfaceViewActivity 上运行,程序似乎运行顺利。

仅使用多边形和颜色,不使用纹理。

通过一些互联网研究,这是一个 recognized bug .那么我该如何进行损害控制呢?

编辑:我解决了问题(我忘记在 View 上调用 ONPAUSE()/ONRESTART())。

最佳答案

令人讨厌的是,我还不能发表评论,但我认为你指的是 onResume,而不是 onRestart。您的 Activity 可以暂停而不停止,这会导致 onPause,但不会导致 onRestart。

这张图片(来自 Activity docs)很好地展示了这个 Activity 的生命周期:

http://developer.android.com/images/activity_lifecycle.png

简而言之,请记住将 onPause 和 onResume 传递给您的 super 和 GLSurfaceView。

来自 http://android-developers.blogspot.com/2009/04/introducing-glsurfaceview.html :

public class ClearActivity extends Activity {
... snip ...

@Override
protected void onPause() {
super.onPause();
mGLView.onPause();
}

@Override
protected void onResume() {
super.onResume();
mGLView.onResume();
}

private GLSurfaceView mGLView;
}

关于android - GLSurfaceView EGL_BAD_ALLOC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6039107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com