1

私のアプリは正常に動作しています (つまり、クラッシュはありません)。テスト中、メモリの使用状況を調査しました。Android Studio (AI-141.2006197) DDMS を使用して Dump HPROF ファイルを出力し、それを Eclipse Memory Analyzer で開きます。このツールは、リークの疑いを説明します:

One instance of "android.graphics.Bitmap" loaded by "<system class loader>" occupies 
2,536,984 (40.81%) bytes. The memory is accumulated in one instance of "byte[]" 
loaded by "<system class loader>".

Keywords
byte[]
android.graphics.Bitmap

dominator_tree からの詳細情報:

path2gc

この 1 日で、アプリのオープニング アクティビティとフラグメントを必要最小限に取り除き、すべてのオープニングとビットマップへの参照を削除し、メニュー、サービス、すべてを削除しました。残っているのは、1 つのフラグメントを含む 1 つのアクティビティだけです。フラグメントには ListView があり、各リスト項目には単純な TextView があります。ビットマップは使用されません。必要に応じて、後でこの質問を編集してコードを表示できます。

この簡素化されたアプリを電話とタブレットでテストしています。アプリをインストールして起動し、最初のフラグメントによって表示されるリストを確認してから終了します。DDMS を介して GC を実行し、ヒープ ダンプを実行して Eclipse メモリ アナライザーで調べます。電話とタブレットの両方で、「潜在的な」メモリリークが見られます。

cynogenmod ROM を使用する私のテスト用電話には、「アセットのパージを許可する」というパフォーマンス設定オプションがあります ( http://pocketnow.com/2012/12/10/5-nexus-4-speed-tips#toc-を参照)。 5)。この機能を有効にすると、潜在的なメモリ リークがなくなります。これは、結局のところ、アプリに問題はないと思いますが、理解できないシステムの動作です。

いくつかの質問:

  1. これはアプリのメモリ リークである可能性がありますか?
  2. テスト アプリがビットマップまたはドローアブルを使用していない場合、ビットマップ用のメモリが割り当てられるのはなぜですか? 何を確認できますか?
  3. Eclipse メモリ アナライザーによって報告された潜在的なメモリ リークのうち、無視できるものを解釈することに関して何かアドバイスはありますか?

前もって感謝します。私は組み込みリアルタイム C のバックグラウンドを持っているので、メモリ リークが発生すると非常に神経質になります。

4

2 に答える 2

1

このビットマップはシステム関連であり、アプリのメモリ リークではありません。Android EdgeEffect は、1 Mb の Heap を使用して 1 メガ ビットマップStrange Bitmap を割り当てているように見えるという投稿を通じて、この結論に達しました。

これを読んでいる人のために、Eclipse メモリ アナライザー ツールが指すビットマップを表示する方法を示した別の非常に役立つ記事を紹介したいと思います。これは、デバッグに非常に役立ちます。MAT (Eclipse メモリ アナライザー)を参照してください- メモリ ダンプからビットマップを表示する方法

于 2015-10-12T00:23:00.340 に答える