0

Android でアプリのメモリ使用量が多い問題をトラブルシューティングする方法を知りたいです。インターネットを検索したところ、アプリのヒープのメモリ ダンプを取得するのに DDMS プラグインが役立つことがわかりました。しかし、これは役に立たなかった。

アプリ「Usage Timelines Free」は 94 MB のメモリが使用されていることを示していますが、DDMS ヒープ ダンプは合計 8.4 MB を示しており、疑わしいリークはリソース ファイルです。

adb (dumpsys meminfo) からダンプを生成すると、次のようになります。

                     Shared  Private     Heap     Heap     Heap

               Pss    Dirty    Dirty     Size    Alloc     Free

            ------   ------   ------   ------   ------   ------

   Native       20        8       20    54588    39431     1892

   Dalvik     6732     9952     6396    10756    10028      728

   Cursor        0        0        0                           

   Ashmem      184        0      184                           

Other dev    11462     1172    11384                           

 .so mmap     2467     2072     1156                           

.jar mmap        0        0        0                           

.apk mmap       48        0        0                           

.ttf mmap        2        0        0                           

.dex mmap     1037        0        0                           

その他 mmap 41 16 32

  Unknown    46352      292    46348                           

    TOTAL    68345    13512    65520    65344    49459     2620

この大量のメモリ消費の背後にあるものをどうやって知ることができますか? 私のアプリは、1 日に数回アクセスされるいくつかのアクティビティを備えた、永久に実行されるフォアグラウンド モニター サービスです。

ありがとう。

4

2 に答える 2

1

Android のデータ使用量を最小限に抑えます。リンクを確認してください: http://engineroots.games4punk.com/minimize-your-android-data-usage/

于 2013-05-16T09:46:19.240 に答える
0

DDMS を実行し、ヒープ メモリ ダンプを取得しました。使用されているのは 8.4 MB だけでした。

次に、完全なガベージ コレクションの後、8.4MB のヒープ スペースしか使用していません (ヒープ ダンプを作成する正味の効果)。

これを Android 1.x/2.x で実行した場合、MAT はビットマップによって消費されるスペースを報告しないことに注意してください。常に Android 3.0 以降のデバイスまたはエミュレーターからヒープをダンプするようにしてください。

adb (dumpsys meminfo) からダンプを生成すると、次のようになります。

私の推測では、これを Android 1.x/2.x デバイスまたはエミュレーターで実行しており、大量のビットマップ メモリがあると思われます。Android 3.0 以降の環境でヒープ ダンプやその他のテストを実行してみてください。

また、adb dumpsys meminfo完全なガベージ コレクションは実行されませんが、HPROF ファイルのダンプでは実行されることに注意してください。Android ガベージ コレクタは、CPU 使用率を最小限に抑えるように最適化されているため、完全なガベージ コレクションを実行しようとはしません。したがって、実行時に、ヒープは通常、必要に応じて GC エンジンによって再利用されるガベージでいっぱいになります。

このテーマに関する Dianne Hackborn のエッセイもお読みください。

于 2012-12-12T12:38:51.013 に答える