Eclipse Memory Analyzer Tool(MAT)を使用してAndroidのアクティビティにメモリリークがあるかどうかを調べています。アクティビティにリークがある場合は、デッドインスタンスがヒープにぶら下がり、ガベージコレクションが行われないことが予想されます。これを確認するには、アクティビティを繰り返し開始/停止(Backボタンを押して)し、MATを使用してヒープダンプを調べます。アクティビティの最初のインスタンスはガベージコレクションされません。
私は説明できないいくつかの奇妙な動作を観察しています。アクティビティの最初のインスタンス(強制終了後に開始されます)はガベージコレクションを取得しません。ただし、それ以降のインスタンスでは発生します。私はMATツールを使用した検査からこれを知っています。何回アクティビティを開始して停止しても、MATツールは常にヒープ上に2つのインスタンスを表示します。最初のインスタンスはアクティビティーが開始された最初のインスタンスに属し、2番目のインスタンスは最後に実行されたアクティビティーに属します。
何が起こっているか、私はこのwrtについて心配する必要があるかどうかについての考え。メモリリーク?提案は非常に高く評価されています。
アクティビティの元のインスタンス、実際のアクティビティ、またはその中で定義された変数のいずれかが保持されている可能性があります。 MATを使用してアクティビティを参照しているものを確認することができます。ビュー上でトレースすることができます。 – dmon
具体的には、GCルートを把握するためにGCルートをトレースする必要があります。 – CommonsWare
これらのコメントありがとう。主にメンバーオブジェクトであるアクティビティを多く保持しています。しかし、「弱い/弱い参照を除外」することは、それをAndroidマッピングコンポーネントにまで煮詰めているようです。私の活動はMapActivityのサブクラスです。失効したアクティビティオブジェクトは、android_maps_conflict_avoidance.com.google.googlenav.map.MapFlashServiceによって参照されるようです。たぶんこれは既知の問題です - 私はそれを調べます。 –