特定のマーカーをポイントしているときにビデオまたは3Dモデルを表示するAugmented Realityアプリがあります。これは正常に動作しますが、MediaPlayerのアクティビティを[戻る]ボタンで終了すると、OpenGLコンテキストが破損しているようです。その後、3Dモデルを含むすべての資産をリロードして、約10〜15秒の遅延を防ぎます。 私はすでにのsetPreserveEGLContextOnPause(true)について読んで、私たちのGLSurfaceView(私たちは3.xタブレット)に入れましたが、何もしないようです(動作させるために何かを実装する必要はありますか?私はほとんどそれについて使用可能なドキュメントを見つけた)。MediaPlayerを終了した後でOpenGLコンテキストが破棄される
私のアプリでどこに問題があるのかわかりませんが、私たちのGLSurfaceのどこかが破壊されてしまい、それに気づかないと思います。私たちは、OpenGLコンテキストを保存する、または当社の主な活動を捨てることなく、MediaPlayerのをやめることができる方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
this.finish();
Intent intent = new Intent(MediaPlayerActivity.this, OpenGLActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}
任意のヒント:
のMediaPlayerから出てくるから、私たちのコードは、このですか?
デバイスが実際にサポートしているGLコンテキストの数を確認しましたか?プロのヒントは、 'onKeyDown(int、KeyEvent)'のものに2つの新しいテストアクティビティを作成し、GLを全く使用しないものと、単純な 'GLSurfaceView'を表示するものです。メディアプレーヤーは、独自のGLコンテキストが必要なもので、タブレットにあなたのリサイクルを強制します。 – Jens
私は単純なToast()(メディアプレーヤーではなく)を表示してGLアクティビティに戻すテストアクティビティを呼び出してみました。同じ結果、GL文脈はなくなった。 GLアクティビティの* onCreate()*と* onResume()*の呼び出しを修正したようですが、SurfaceViewの* onResume()*はnullであるため呼び出すことができません。 – Lennart
このような状況で、すべてのアクティビティが最初から再作成されているわけではありませんか?そして、onCreateが呼び出されると、Viewsを再作成するはずです。あなたができることは、例えばActivity.onRetainNonConfigurationInstance()を使ってレンダラーをリサイクルし、見つかった場合にonCreate()中に再利用することです。ここでは、少なくともモデルを再ロードする必要がないように、モデルを保存することができます。 – harism