2

アプリケーション アクティビティでウィンドウ リークが発生しましたが、これを修正しました。しかし、Android のメモリ アナライザー ツール - ヒストグラム ビューを使用してアプリをテストすると、アクティビティの 2 つのインスタンスが見つかりました。

クラス名 | オブジェクト | 浅いヒープ | 保持ヒープ

. MATDemoActivity. | | | | | |
com.pace.mat.MATDemoActivity | 2 | 368 |

合計: 1 エントリ (2,195 フィルタ)| | | | |

メモリリークがないのに、どうやって2つのオブジェクトになるのでしょうか? MAT結果のデータを理解するのを手伝ってください....よろしくお願いします

このリンクで完全なコードと関連する議論を見つけてください。

コード内の Android メモリリーク

=================

Activity 1st -> 2nd -> 1st から始めるとわかりました。1 番目のアクティビティ クラスの浅いヒープ = 2 および 2 番目のアクティビティ クラス = 1 で、1 番目から移動する場合 -> 2 番目 -> 1 番目 -> 2 番目 ... 1 番目のアクティビティ クラスの浅いヒープ = 1 および 2 番目のアクティビティ クラス = 2。

だから私は起動モードで試しました。すべてのアクティビティに android:launchMode="singleTask" を設定しました。現在、両方のアクティビティの浅いヒープは、ページに移動した回数と同じです。しかし、この起動モードでは複数のインスタンスが許可されていないため、浅いヒープ オブジェクトのカウントが 1 にならないのはなぜですか?

これをよりよく理解するのに役立つアイデアを共有してください。

4

2 に答える 2

1

アクティビティで不要なオブジェクトを作成すると、メモリリークが発生します。したがって、役に立たないクラスのオブジェクトを作成しないようにすることが非常に重要です。これらは、メモリを解放せずに保持します。このリンクは、問題を解決するのに役立つと思います問題。

于 2012-05-17T10:01:58.987 に答える
0

Android では、メモリ アナライザー ツールを使用して、特定のコードでメモリ リーク (存在する場合) をキャプチャできます。リークの原因となる操作を実行する直前と、操作の完了後にヒープ ダンプを生成する必要があります。これら 2 つのダンプを比較して、メモリを消費しているオブジェクトと、ガベージ コレクトされない理由を見つけます。

上記の私の場合、2 番目のアクティビティに行った後に生成されたダンプを分析するのではなく、アクティビティの前後のダンプを比較しようとしました。必要な結果を明確に得ました。

また、MAT ツールに関しては、複数回試してダンプを比較し、分析用のダンプを選択するとよいでしょう。

友よありがとう。

于 2012-07-06T12:12:11.983 に答える