私はちょうどgoogle ioのビデオ "アンドロイドのためのメモリ管理"を見ました。スライドはhttp://dubroy.com/memory_management_for_android_apps.pdfから入手できます。メモリリークの例は、スライド36にあります。Google I/OのAndroidメモリリークの例
これは、方向変更後にリークが発生する理由はわかりません。私はリークが内部クラスであり、外部クラスへの参照を持っていることを理解しています。また、静的変数 "leak"が "Leaky"オブジェクトを参照していることを理解しています。私はそれが静的なキーワードのために特別だと思う。静的変数には一定のメモリがあり、少なくともアプリケーションが実行されている間はgc'edされませんか?
さて、オーランドの変更はどうなりますか?新しいアクティビティインスタンスが作成され、アクティビティonCreate
が呼び出されます。 leak == null
はfalseです。 Leakは "古い"活動を指しています。それはリークです。古い活動はできません。
すべてのバージョンが変更されると、メモリ使用量が増加するのはなぜですか?私の(間違った)理解では、最初のアクティビティだけがgc'edできないと思います。 orantationの変更のために作成された他のアクティビティは、その静的変数 "leak"によって参照されないため、gc'edできます。
しかし、明らかに..私は完全に間違っています!
これは役に立ちましたか?受け入れは素敵でしょう:) –
あなたは活動の破壊==ガベージコレクションだと思います。私は何が起こっているのかを説明しようとする答えを加えました。基本的には、新しく作成されたアクティビティではリークが== nullになるからです。なぜ、私の答えを読んでください。 – iheanyi