私のGLSurfaceViewに問題があります。onPause()/ onResume()のGLSurfaceに関する問題
主なアクティビティにはTabLayoutがあります。 、私はonPause()とonResume()メソッドを呼び出す必要がAndroidの開発者ガイドによると
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);
:私はこのようなタブ内GLSurfaceViewを入れ
A GLSurfaceViewは、ときに通知しなければなりませんアクティビティが一時停止され、再開されます。 GLSurfaceViewクライアントは、アクティビティが一時停止したときにonPause()を呼び出し、アクティビティが再開したときにonResume()を呼び出す必要があります。これらの呼び出しにより、GLSurfaceViewはレンダリングスレッドを一時停止および再開できるほか、GLSurfaceViewがOpenGLディスプレイを解放して再作成できるようになります。
だから私はonResume()/ onPause()が私の主な活動onResume()/ onPause()で呼び出しますinsertet:
@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