2011-06-24 5 views
1

ゲームアクティビティサーフェス(Open GL内)を呼び出す通常の主なアクティビティがあります。Android OpenGL ESゲームは、アクティビティGameSurfaceの外出時にフリーメモリではありません

OpenGlサーフェスでアクティビティをドロップすると、エンジンはテクスチャを削除してアクティビティゲームを終了します。私はゲームアクティビティ(繰り返し負荷テクスチャ)を呼び出すと、ヒープ内のメモリが大量に消費され(重複しているように見えます)、ゲームのフレームレートが取得されます。スロー。プロセスを繰り返すと、メモリヒープが増えています。

アプリ全体を閉じるとどうなりますか? Androidのフリーズアップと私は通常の速度でメモリを消費してアプリを再オープンすることができます。

私はゴミを試しました...何かopenglサーフェイスに関連しているようです。

私の質問:Open glを含むサーフェスアクティビティを閉じても、開いたglバッファはまだヒープに割り当てられていますか?閉じた後、開いたglで新しいアクティビティを開くと、開いたglのサイズが複製されますか?メモリ内にはそのように見えるが、私はその理由を知ることができた。

答えて

0

私は解決策を得ました。

弱い参照であるため、Androidはメモリ内のすべてのコンテキストを保護しています。

私のゲームはゲームmainThreadで一時停止し、トーストメッセージを表示します。ユーザは、ゲームを離れるか、またはゲームに再入力することができる。彼が画面を去った場合、アンドロイドは最後のアクティビティを閉じた後もまだポップアップしていない、Toastメッセージが表示されているため、Androidはすべてのglオブジェクトでメモリ内の死んだアクティビティの参照を保持します。私はちょうどgetApplicationContext()を使用しています。

0

すべてのテクスチャをonDestroy()メソッドに配置してみます。そうすることで、アクティビティの終了/終了時にすべてのテクスチャが破棄されます。

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    for(Texture t:textures) { 
     t.dispose(); 
    } 
} 

注:Androidには独自のテクスチャクラスがあります。私はlibgdxを使っていましたが、呼び出すdisposeメソッドがあります。たぶんあなたはそれらのゴミを処分する方法を見つけるべきでしょう。私がリコールする場合は、同じことをするビットマップクラスのリサイクル()メソッドがあります。

関連する問題