1

を使用するタブ付きアプリケーションがありますGLSurfaceView。初めてタブを押すと、ビューが作成されて表示されます。タブを 2 回押すと、表面は破壊されていますが、新しく作成されたわけではありません。メソッドonStop()とメソッドonResume()が呼び出されます。ホームボタンを押すと、表面が破壊されています。アプリを再度開くと、新しいサーフェスが作成されています。

eglContext私の質問は次のとおりです。もう一度ビューを表示したいのに、なぜ作成されないのですか? なぜ新しいGLThreadものが作成されないのですか?または、どうすれば と を強制的に再作成できEGLSurfaceますGLThreadか? 私の Samsung Galaxy mini では動作しません。私のSamsung Galaxy SIIでは動作します。問題をグーグル検索したところ、バグが見つかりましたが、有効な修正はありGLSurfaceViewませんでした。

いくつかの有用な回答をありがとう、そして私の英語ですみません:-)

4

1 に答える 1

1

を手に入れましたIllegalArgumentExceptionか?

10-08 18:05:36.490: E/GLSurfaceView(3440): eglCreateWindowSurface
10-08 18:05:36.490: E/GLSurfaceView(3440): java.lang.IllegalArgumentException: Make sure the SurfaceView or associated SurfaceHolder has a valid Surface
10-08 18:05:36.490: E/GLSurfaceView(3440): at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface(Native Method)
10-08 18:05:36.490: E/GLSurfaceView(3440): at com.google.android.gles_jni.EGLImpl.eglCreateWindowSurface(EGLImpl.java:90)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$DefaultWindowSurfaceFactory.createWindowSurface(GLSurfaceView.java:798)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$EglHelper.createSurface(GLSurfaceView.java:1065)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1433)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)

はいの場合は、パッチを適用する必要がありますGLSurfaceView

から:

                if (createEglSurface) {
                    if (LOG_SURFACE) {
                        Log.w("GLThread", "egl createSurface");
                    }
                    gl = (GL10) mEglHelper.createSurface(getHolder());
                    if (gl == null) {
                        // Couldn't create a surface. Quit quietly.
                        break;
                    }
                    sGLThreadManager.checkGLDriver(gl);
                    createEglSurface = false;
                }

に:

                if (createEglSurface) {
                    if (LOG_SURFACE) {
                        Log.w("GLThread", "egl createSurface");
                    }
                    gl = (GL10) mEglHelper.createSurface(getHolder());
                    if (gl == null) {
                        // If we escape, GLThread ends up. Don't escape.
                        continue;
                    }
                    sGLThreadManager.checkGLDriver(gl);
                    createEglSurface = false;
                }

GLSurfaceView クラスを作成し、上記のようにパッチを適用します。

JellyBean で修正されました。このコミットも参照してください。

于 2012-10-15T10:36:43.160 に答える