1

Androidアプリがリークしました。何を確認すればよいですか?

メモリリークを回避する方法を確認し、アクティビティのonDestroy()メソッドにいくつかのunbindDrawables()呼び出しを追加してクリーンアップしましたが、何も変更されていません。また、すべてのgetContext()呼び出しをgetApplicationContext()に置き換えますが、何も変更されていません。

DDMS Eclipseパースペクティブでヒープサイズを監視します。アプリを初めて起動すると3Mbが割り当てられ、10回閉じて再起動すると10Mbが割り当てられます。

私のビューは、主にViewFlippersと、LinearLayoutのサブクラスから継承する多くのネストされたレイアウトで構成されています。

編集:

MATを実行してリークの疑いを特定した後、主な問題は次のとおりです。

16 instances of "org.apache.http.impl.conn.tsccm.ConnPoolByRoute", 
loaded by "<system class loader>" occupy 4,000,328 (44.08%) bytes.
4

1 に答える 1

1

あちこちで使用getApplicationContext()している場合は、確実にメモリ リークが発生しています。それは一般的に悪い考えです。適切な場所で適切なコンテキストを使用する必要があります。

ヒープ ダンプを取得し、プロファイラー (MAT や jhat など) を使用して、存在しないはずのインスタンス (破棄されているはずのアクティビティ) を調べます。参照の連鎖をたどって、それらが再利用されない理由を突き止めてください。

于 2012-06-19T15:09:56.440 に答える