6

ここに明白な答えがあると思います...私はこれと混同されたままになっています:

私が行ったのが次の場合だけで、17.8MiBヒープメモリが割り当てられるのはなぜですか。

  1. Eclipseの[新しいプロジェクト]オプションを使用して、単純な「HelloWorld」プロジェクトを作成しました。
  2. そして、56KiBの背景画像を追加しました。

回線をandroid:background="@drawable/background4"削除すると、割り当てられたメモリは11.9MiBに減少します。

  • これは、システムがこれだけのメモリを割り当てるのは正常ですか?心配する必要がありますか?
  • これだけのヒープを占めるものは何でしょうか。

また、MATレポートを実行しましたが、そこからどのような結論を導き出すことができるかわかりません。

前もって感謝します、

4

3 に答える 3

4

そして、56KiBの背景画像を追加しました。

いいえ、背景画像として使用している56KiBファイルを追加しました。

ビットマップによって消費される実際のヒープスペースは、ピクセルあたり3バイトです。(MAT画面あたり)最大6MBのビットマップを使用して、かなり高解像度のデバイスまたはエミュレーターでアプリを実行しています(1080pの場合は最大8MB、IIRCになります)。

于 2013-03-14T11:16:10.323 に答える
1

AFAIK Androidは、レイアウトを膨らませると、レイアウト内の画像をバイト配列に変換します。

画面に合わせて拡大するには背景画像が必要です。これを行うには余分なメモリが必要になります。そのため、その量のメモリが割り当てられます。私は正しくないかもしれませんが、間違っている場合は知らせてください。

于 2013-03-14T09:03:53.103 に答える
0

わかりました。ここの数値は間違っている可能性がありますが、Android 3を超えるものには、メモリヒープの制限が24MB(16MB前でデバイスごとに異なります)になります。また、すべてのJVMと同様に、メモリはほぼ完全に割り当てられるため、アプリケーションはライフサイクル中に再割り当てを行う必要がありません。

これは、アプリケーションが実際に24 MBで実行されているということではありませんが、必要に応じて割り当てられています。

アプリケーションが使用できるヒープメモリの量を増やすこともできることは知っていますが、そうする必要があると感じた場合に備えて、コードを再検討することをお勧めします。

明らかに、アプリケーションが閉じられるとすぐにガベージコレクションが行われます。

更新 必要に応じてヒープを増やす方法は次のとおりです。

android:largeHeap="true"
于 2013-03-14T09:04:04.653 に答える