最近查看bugly ,发现存在一个多版本遗留 棘手的量级几十w的bug:
java.lang.RuntimeException
createContext failed: EGL_BAD_CONFIG
android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1245)
android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1236)
android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1086)
android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1462)
android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1299)
报错信息发生在Android framework api 中,因此考虑从源码入手,本案例是基于 android 7.0 。
1.查看源码走向
先来看下GLSurfaceView$EglHelper#start():
frameworks/base/opengl/java/android/opengl/GLSurfaceView.java
/**
* Initialize EGL for a given configuration spec.
* @param configSpec
*/
public void start() {
mEgl = (EGL10) EGLContext.getEGL();
mEglDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
//.......
GLSurfaceView view = mGLSurfaceViewWeakRef.get();
if (view == null) {
mEglConfig = null;
mEglContext =

分析了Android系统中由于创建EGLContext失败导致的EGL_BAD_CONFIG异常,从源码层面追踪到问题可能在于获取无效的display。排查了可能是设备不支持OpenGLES2的情况,发现大部分新机型都支持。最后指出,可能是由于onPause()没有正确调用导致的状态错误。建议确保Activity的onResume()和onPause()与GLSurfaceView的相应方法同步调用。

5321

被折叠的 条评论
为什么被折叠?



