libGDX を使用して 2D ゲームを開発しているときに、メモリ消費に関する問題に直面しています。
これは豊富なグラフィック コンテンツを備えた 2D ゲームです。多くのテクスチャ、アニメーション、フォントなどがあります。何らかの理由で、ゲームの開始時にすべてのグラフィック コンテンツがロードされます。メモリに問題があります。さまざまなデバイスでメモリ割り当て (ネイティブとヒープ) をテストしたところ、さまざまな結果が得られました: (グループのすべてのデバイスをテクスチャ サイズで分割しました)
グループ 1 (~840*480 画面に採用されたテクスチャ)
HTC Desire (Froyo): 178Mb (ネイティブ) - 12Mb (ヒープ) -アプリケーションは正常にロードされます
HTC One V (ICS): 30Mb (ネイティブ) - 12Mb (ヒープ) -アプリケーションが正常に読み込まれます
HTC Desire S (Jelly Bean): 30Mb (ネイティブ) - 12Mb (ヒープ) -アプリケーションは正常にロードされます
グループ 2 (~1366*768 画面に採用されたテクスチャ)
Samsung(Google) Galaxy Nexus 329Mb(ネイティブ) - 18Mb(ヒープ) -完全に動作
Galaxy TAB (ハニカム) 164Mb(ネイティブ) - 10Mb(ヒープ) -アプリケーションがクラッシュします(Surface.OutOfResouresException)。
すべてのAndroidバージョンでメモリ管理に大きな違いがある可能性があると思います。これにより、これらの問題が発生します。
Android 3.xでテクスチャをロードしているときに正確に何が起こるか説明できますか? または、この問題を解決するために何をする必要があるかを理解するために、いくつかのリンクを投稿してください。
いくつかの更新
Toady 3.x エミュレーターでいくつかの追加テストを行いました (これが最善の方法ではないことはわかっていますが、ログは以前の emu と Galaxy Tab で似ていました)。
- 1024*600 に採用されたテクスチャでゲームを実行しました - 80% の読み込みリソース (158 のネイティブ メモリ割り当て) でアプリがクラッシュします
- 800*480 のテクスチャを使用 - 100% の読み込みでアプリがクラッシュする (145Mb のネイティブ メモリ割り当て)
そして最後に、3.x タブレット (1280*800px) と同じテクスチャを使用する新しい Google Nexus タブレット (Jelly Bean) でアプリを実行しました - ~30Mb のネイティブ メモリと ~12Mb の VM ヒープ。
今、私は何が起こっているのか完全に理解できなくなりました - テクスチャ 800*480 と 1280*800 の同じメモリ割り当て...
最後に
私は、プログレスバーを使用してオンデマンドでリソースをロードすることにより、この状況を解決しました。すべての試みの後、私は別の方法を見つけられませんでした。