У меня проблемы с моим 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 ().
Кто-нибудь знает, как это исправить?
Заранее спасибо!
Адриан