onPause()/ onResume()中GLSurface的问题

时间:2012-02-10 19:35:20

标签: android opengl-es onresume glsurfaceview onpause

我的GLSurfaceView出现问题。

我的主要活动有一个TabLayout。我在一个标签中放了一个GLSurfaceView:

    renderer = new GLRendererX(Interface.this);
    cube3d = new GLSurfaceView(Interface.this);
    cube3d.setRenderer(renderer);
    cube3d.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

    cube3d.setOnTouchListener(new OnTouch());

    cube3d_tab_content = (LinearLayout) findViewById(R.id.tab1_5);
    cube3d_tab_content.addView(cube3d);

根据Android开发人员指南,我必须调用onPause()和onResume()方法:

  

当活动暂停并恢复时,必须通知GLSurfaceView。 GLSurfaceView客户端需要在活动暂停时调用onPause(),并在活动恢复时调用onResume()。这些调用允许GLSurfaceView暂停和恢复渲染线程,并允许GLSurfaceView释放并重新创建OpenGL显示。

Android Dev Guide

所以我在主要活动onResume()/ onPause()中插入onResume()/ onPause()调用:

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

    cube3d.onPause();
    //cube3d_tab_content.removeView(cube3d);

    currentTab = th.getCurrentTabTag();
}

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

    cube3d.onResume();

    if (prefs != null) {
        protocol.refresh();
    }
    th.setCurrentTabByTag(currentTab);

    cube.setFields(ffields, rfields, lfields, ufields, dfields, bfields);

    cube.display();
}

现在,当我调用另一个活动时 - 例如通过菜单 - 并返回(onResume),活动冻结了几秒钟,最后返回到我的主要活动。

为确保仅在GLSurfaceView中出现问题,我删除了有关GLSurfaceView的代码。它按预期工作。

所以我认为我的cube3d.onPause()/ .onResume()出了问题。

有谁知道如何解决这个问题?

提前致谢!

阿德里安

2 个答案:

答案 0 :(得分:1)

在主线程(UI线程)中调用这两个方法:YourActivity.onPause / YourGLSurfaceView.onPause

所以,也许在YourGLSurfaceView.java中应该这样:

public void onPause() {
    queueEvent(new Runnable() {
        @Override
        public void run() {
            3dcube.onPause();
        }
    });

    super.onPause();
}

答案 1 :(得分:0)

您应该从onpausse onresume()方法注册/取消注册渲染器,它将完美地工作