1

当初、マネージコードやガベージコレクションなどの性質上、Androidでのメモリリークの可能性についてはあまり注意を払っていませんでした。これは少しナイーブだったのではないかと思います。ここに質問があります:

アクティビティがあるとしましょう-MyActivity。OSが起動すると、onCreate()で別のクラス(MyOtherClass)がインスタンス化され、そのクラスへの参照が保持されます。ただし、MyOtherClassのインスタンスは、コンテキストへの参照も保持していると言います。これは、MyActivityのインスタンスへの参照でもあります。

ここで何かが起こります-画面が回転するとします。OSはアクティビティonDestroy()を呼び出し、MyActivityの古いインスタンスへの参照を削除します。ただし、そのアクティビティインスタンスには、引き続きMyOtherClassのインスタンスへの参照があり、MyOtherClassにはアクティビティへのインスタンスがあります。

それで、私はこれらの2つのクラスがお互いを永遠に生き続けるだろうと思っているのは正しいですか?

もしそうなら、考えられる答えは、(a)コンテキスト参照を保持しない、別の方法で取得する、または(b)アクティビティonDestroy()で、他の参照を削除することです。そうすれば、すべてが崩壊するはずです。 。

4

1 に答える 1

1

Javaは、サイクリックリンクが(メモリ内で)相互に存続することを許可しません。ただし、参照を静的に宣言した場合、またはシングルトンスタイルのオブジェクトを作成した場合、Javaはそこでは役に立ちません。

良いスタートは、メモリリークを避けて読むことかもしれません。

于 2012-11-11T07:55:42.550 に答える