我遇到了我的GLSurfaceView问题。onPause()/ onResume()中的GLSurface问题
我的主要活动有一个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显示。
所以我insertet了的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)时,活动冻结了几秒钟,并且fina lly返回到我的主要活动。
为了确保问题只发生在GLSurfaceView上,我删除了有关GLSurfaceView的代码。它的工作原理应该如此。
所以我认为我的cube3d.onPause()/ .onResume()有问题。
有谁知道如何解决这个问题?
在此先感谢!
阿德里安
我发现了一个可行的解决方案,但我不太确定这是否一个正确的方法来做到这一点。我只是将初始化GLSurfaceView的部分移到了onResume()。然后,当调用onPause()时: 'cube3d_tab_content.removeAllViews(); cube3d = null;' 这是安全吗? – aeduG 2012-02-10 21:21:17