ゲーム アプリで何らかのメモリの問題が発生しています。初めて実行すると、スプラッシュ スクリーン アクティビティが機能し、レベル選択アクティビティが機能し、次にゲーム プレイ モードが機能し、多くのレベルを問題なくプレイできます。それから私はゲームをやめました。次に、アプリを 2 回目に実行すると、スプラッシュ画面が表示される前に、OutOfMemoryError: ビットマップ サイズが VM の予算を超えています。
私のアプリは、次のような SD_globals という単一のアプリケーションに基づいています。
public class SD_Globals extends Application
{
int example_global_data = 99;
// stuff
}
それぞれが SD_Globals で宣言されたさまざまなグローバル データにアクセスできます。たとえば、アクティビティの 1 つは次のような SD_gameplay です。
public class SD_GamePlay extends Activity implements View.OnClickListener
{
SD_Globals gs; // gs stands for global state
gs = ((SD_Globals)getApplicationContext());
// now I can access global variable using code like this:
int x = gs.example_global_data;
}
このセットアップでどのような種類のエラーが発生する可能性があるかについてのアイデアは大歓迎ですが、それは私の特定の質問ではありません.
DDMS とメモリ アナライザーを使用して問題を診断する方法について少し読んだことがありますが、最も有用な情報を得るために [Dump HPROF file] ボタンを押すのに最適な時期はいつなのか、よくわかりません。ゲームがまだプレイ中なのか、ゲームを終了した後 (ただし 2 回目の実行前) なのか、それともクラッシュした直後なのか?
編集: Akhil の回答に応じて、getApplicationContext() を各個別のアクティビティの onCreate メソッドで 1 回だけ使用し、他のインスタンスでは使用しないことを明確にします。また、この一般的なアプリケーション構造 ( を使用gs = ((SD_Globals)getApplicationContext())
) は、数週間前から市場に出回っていて、30,000 回のダウンロードがあり、Google Play に報告された OutOfMemoryError がゼロである私のゲームの古いバージョンで完全に堅牢に機能していると言う必要があります。