1

アプリ内のアクティビティの一部でメモリ リークが発生しているようです。私は次のことを試しました: アクティビティ A はランチャー アクティビティであり、合計 23.5 MB のメモリ (dalvik + ネイティブ) を使用します。A からアクティビティ B を開始すると、アプリはさらに約 4 MB (~27.5 MB) 使用します。A からアクティビティ C を開始すると、アプリもさらに 4 MB (~27.5 MB) 必要になります。したがって、両方のアクティビティを開始すると、約 7 MB (~30.5 MB) が使用されます。A-> A から B を開始-> B から C を開始-> B を終了.追加で使用されるメモリの予想量は約 4MB (~27.5MB) ですが、私のアプリは実際に全体的に消費しますさらに 7 MB (~30.5 MB)。なぜこれが起こるのですか?

thx&よろしく

PS: アプリのメモリ使用量を分析するために Little Eye を使用しています。すべてのデータは合計メモリ値 (dalvik + ネイティブ) を表しています。A-> A から B を開始するだけで、B を終了すると、ステップ 3 の後にメモリは解放されません。

4

1 に答える 1

3

ガベージ コレクターに強制的にメモリを収集させることはできません。finish() は、アクティビティが終了し、結果を反映できることをシステムに伝えるだけです。

http://developer.android.com/reference/android/app/Activity.html#finish%28%29

System.gc() を使用してガベージ コレクターを強制してみてください。ただし、オブジェクトへの有効な参照が存在しない場合でも、メモリがガベージ コレクションされることは保証されません。ここを見てみてください:

http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html

また、ガベージ コレクション環境でのメモリ リークは、保留中の参照がまだオブジェクトを指しているため、オブジェクトをガベージ コレクションできないことを意味します。このような場合は、Eclipse プラグイン MAT を使用してみてください。

于 2013-08-14T23:42:13.350 に答える