1

メモリ リークのあるアプリを使用していますが、しばらくするとそのユーザーがそのアプリを使用します。heapヒープ サイズと割り当て済みを調べることで、Tab を使用して DDMS で確認できました。

アプリケーションでは、ユーザーはいつでもデバイスのカメラを使用して画像を撮影し、画像に描画して、システムに保存できます。

ユーザーがシステムで作成するすべてのレコードによって、割り当てられたメモリが少し増加し、特定の数のレコードの後に​​メモリ リークが発生します。

DDMS で .hprof をエクスポートし、Android SDK から unisg hprof-conv を使用してEclipse メモリ アナライザーファイルに変換します。次のような問題の原因を確認するために、いくつかのリンクをたどりました。

Google I/O 2011: Android アプリのメモリ管理

Eclipse Memory Analyzer を使用するための 10 のヒント

私はまだ問題の原因を見つけることができませんでした。これは SkyDrive の Mat.hprof ファイルです: https://skydrive.live.com/#cid=2EB3385F103C2550&id=2EB3385F103C2550%21105

誰かがこのファイルを見て、問題の原因を教えてくれませんか? または改善のための提案はありますか?

4

3 に答える 3

0

.hprof ファイルを MAT に読み込んだ後、OutOfMemoryError が発生したネストされたコレクションを含む多くの配列をアプリが作成していることがわかりました。では、その理由は何ですか?AutoCompleteTextView で結果を取得するには、おそらくメモリ リークを引き起こす可能性がある Handler を使用しています。最終的に現在のビューとアクティビティの強力な参照を保持できます。ライフ サイクル イベントが発生したときは、コレクションのリリース プロセスに注意を払う必要があります。

于 2016-01-20T15:27:19.903 に答える
0

それは簡単です :

- ダンプを開き、ドミネーター ツリーを使用します。 ここに画像の説明を入力

スタックに保持されている 2 つの大きなオブジェクト、リソースからの 1 つ、およびビットマップを確認できます。-右クリックを使用して、ビットマップ上の gc への最短パスを表示します。

ここに画像の説明を入力

そこに、答えが見えます。アプリの res フォルダーに大きな画像が含まれている可能性があります。問題は、この画像をレイアウトで直接使用すると、メモリ不足エラーが発生する可能性があることです。メモリ リークを回避するには、このチュートリアルを使用してプログラムでビットマップを読み込む必要があります。

http://developer.android.com/training/displaying-bitmaps/index.html

于 2013-08-07T14:39:36.353 に答える
0

MAT で 2 つの hprof ファイルを比較しようとしましたか?

ヒストグラム ビューに [別のヒープ ダンプと比較] オプションがあります。2 つの hprof ファイルの違いが表示されるので、メモリ リークを見つけやすくなります。

于 2013-08-07T14:17:45.077 に答える