私は奇妙な問題に遭遇しました-私はAndroidゲームを作成していて、数秒ごとにラグに気づき、ガベージコレクターが50〜150ミリ秒ごとに数秒ごとに呼び出されていることに気付いたときにログを確認しました。
1 つの背景画像 (150kb) を使用して、タイトル画面のアクティビティを起動するときに、この問題を画像に落とし込みました。メッセージは次のとおりです。
4% フリー (8009k/8259k) GROW HEAP から 9.012MB GC_CONCURRENT 1kb を解放 (9178k/9479k)
これは、画像と 3 つのボタンのための大量のヒープ スペースです。画像を削除しても、警告やメッセージは表示されません (ヒープ領域に出力を強制する方法はわかりませんが、正常なレベルであることを願っています)
アクティビティ イメージのコードは、単なるタイトル画面であるため、それほどエキサイティングではありませんが、次のようになります。
<ImageView
android:id="@+id/backgroundImage1"
android:contentDescription="Image"
android:src="@drawable/openingscreen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"
/>
実際のゲームを起動すると、ヒープ サイズが再び増加します (数 MB だけ)。奇妙なことに、タイトル画面がなかったとき、メイン ゲームのヒープ スペースはまだ 12 MB 程度だったので、たぶん、画像は他のすべてへの参照を保持していると思います. サイズが 1 ピクセルの背景画像を使用してみましたが、問題は発生しませんでした。
次に、gameThread 内の画像のコード:
mPlayer = Bitmap.createScaledBitmap(mPlayer, mCanvasWidth / 15, mCanvasHeight / 8, true);
canvas.drawBitmap(mPlayer, xPosition, yPosition, null);
ビットマップをスケーリングするとメモリの問題が発生する可能性があるとどこかで聞いたことがありますが、それは実際には他のすべてとは一致しません。