2

戻るキーを押すと、アクティビティが「破棄」されるか、開発者が関数finish()を呼び出したとき、またはシステムがメモリを必要とするときなど...

また、OutOfMemory 例外を回避するために、unBindDrawables (を参照) のように onDestroy でクリーンアップ手順を実行する必要があることもおなじみです。

私の質問は:

アクティビティの破棄は、アクティビティ オブジェクトへの参照が削除されたことを意味しますか? つまり、アクティビティ オブジェクトが GC で使用できるようになりますか? もしそうなら、アクティビティの関連付けられたビューへの参照を明示的に削除する必要があるのはなぜですか?

例を考えてみましょう:

オブジェクトAにオブジェクトBへの参照があり、BがAによってのみ参照されている場合、 Aの参照を無効にすると、Bの参照を明示的に null に設定する必要はありません。両方とも GC 処理されます...

私の直感では、Activity の場合はこのようになっていると思います。どこが間違っているのか教えてください。

ありがとう!

4

2 に答える 2

2

アクティビティの破棄は、アクティビティ オブジェクトへの参照が削除されたことを意味しますか? つまり、アクティビティ オブジェクトが GC で使用できるようになりますか?

はい、Android がアクティビティを手放す限り。静的コンテキストから (直接的または間接的に) 参照している場合、ガベージ コレクションは行われません。

もしそうなら、アクティビティの関連付けられたビューへの参照を明示的に削除する必要があるのはなぜですか?

「アクティビティに関連付けられたビューへの参照を明示的に削除する必要はありません」。

于 2012-08-09T20:53:44.847 に答える
0

戻るボタンを押すと、アプリは破棄されずに一時停止され、SO は onPause() メソッドを呼び出します。たとえば、SO がメモリ不足の状態を検出した場合、SO は破棄され、onDestroy メソッドが呼び出されます。この方法では、スレッド (スレッドを開始した場合) または不要になったすべてのものをクリーンアップする必要があり、リソースの消費を引き起こします。サーブレットに精通している場合、Android の onDestroy メソッドは非常に似ています。これがあなたを助けることを願っています

于 2012-08-10T09:10:39.087 に答える