У меня проблемы с моим GLSurfaceView.Проблемы с GLSurface в onPause()/onResume()
Моей основной деятельностью является 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), активность замерзает на пару секунд и заканчивается lly возвращается к моей основной деятельности.
Чтобы убедиться, что проблема возникает только с GLSurfaceView, я удалил код, относящийся к GLSurfaceView. Он работал так, как должен.
Так что я предполагаю, что что-то не так с моим cube3d.onPause()/.onResume().
Кто-нибудь знает, как это исправить?
Заранее благодарен!
Адриан
Я нашел решение, которое работает, но я не уверен, правильный способ сделать это. Я просто переместил часть, где я инициализирую GLSurfaceView до onResume(). И затем, когда вызывается onPause(): 'cube3d_tab_content.removeAllViews(); cube3d = null; ' Безопасно это или нет? – aeduG