每次方向改变时都会调用 onSurfaceCreated()

1Fp*_*x6k 4 android opengl-es orientation

我正在像这样实现 GLSurfaceView.Renderer:

public class GL20Renderer implements GLSurfaceView.Renderer {
    private static GL20Renderer mInstance = new GL20Renderer();
    private GL20Renderer() {}
    public static GL20Renderer getInstance() {
        return mInstance;
    }

    @Override
    public void onDrawFrame(GL10 gl) {
        Log.e("App", "onDrawFrame()");
    }
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        Log.e("App", "onSurfaceChanged()");
    }
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        Log.e("App", "onSurfaceCreated()");
    }

}
Run Code Online (Sandbox Code Playgroud)

该类在MainActivity中实现:

public class MainActivity extends Activity {
    private GLSurfaceView mGLView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        // Create a GLSurfaceView instance and set it as the ContentView for this Activity
        mGLView = new GL20SurfaceView(this);
        setContentView(mGLView);
    }

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

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

}
Run Code Online (Sandbox Code Playgroud)

GL20SurfaceView是:

public class GL20SurfaceView extends GLSurfaceView {
    public GL20SurfaceView(Context context) {
        super(context);

        // Create an OpenGL ES 2.0 context.
        setEGLContextClientVersion(2);

        // Set the Renderer for drawing on the GLSurfaceView
        setRenderer(GL20Renderer.getInstance());
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,非常简单。现在,当我启动应用程序时,会正确调用 onSurfaceCreated() 方法,然后调用一次 onSurfaceChanged()。

现在的问题是:每当设备方向发生变化时,我都会再次调用 onSurfaceCreated() ,然后调用 onSurfaceChanged()

根据我的理解,每当需要创建新表面时都会调用 onSurfaceCreated() 方法。我的问题是:为什么每当我仅更改设备方向时它会这样做?难道只触发​​ onSurfaceChanged() 调用来调整视口就足够了吗?

请注意,更改方向时我不会让设备进入睡眠状态。

Bir*_*dia 5

这样做

<activity
            android:name=".MainActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            />
Run Code Online (Sandbox Code Playgroud)