現在、Android (OpenGL ES 1.1) でゲームを開発しています。新しい SurfaceView (GLView) を作成するたびに、そのスレッドが作成されることがわかります。それで大丈夫です。問題は、SurfaceView を保持するアクティビティを終了したい (そしてメニューに戻りたい) ときに発生します。各GLThreadが参照しているため、アクティビティが解放されていないようです。これは、OOM エラーで終了する場合があります。
いくつかのマットの写真:
最初の図: MarkitActivity は、SurfaceView を扱うアクティビティの各インスタンスを表します。
2 番目の図: メモリ内のすべてのアクティビティのリスト。
3 番目の写真: GC からアクティビティを保持しているもの。
コードが必要な場合は、投稿します。それにもかかわらず、私はすでに次のことを試しました:
->レンダラーとサーフェス ビューへのアクティビティ コンテキストの弱い参照。
->アクティビティ コンテキストの代わりにアプリケーション コンテキスト (ノーマル モードとウィーク モード)。
->スレッドを(難しい方法で)停止しようとして(割り込み)、結合を待機しています(プログラムはそれを行いますが、スレッドは気にしません。まだそこにあります...)
->デバッガモードで値が変わる場合に備えて、デバッグなしで試しています(MATの写真はデバッガなしです)。
->Activity を singleInstance モードで試しています。どこでも奇妙な結果とエラー。
->onPause と onResume がビューに対して正しく制御されます。
ヒント、アイデア、質問、またはヘルプをいただければ幸いです。前もって感謝します!
カルロス。