安卓保存当前Activity http://droidyue.com/blog/2016... 这个第三种方法是我最满意的,在Application中采用registerActivityLifecycleCallbacks注册Activity声明周期回调,在resume回调中,使用弱引用保存Activity的引用,因为强引可能会引起内存泄露,但我觉得用弱引用也有问题,弱引用只要垃圾收集线程扫描到这个区域就会把内存回收,所以,如果弱引用指向的Activity被垃圾收集器回收了怎么办?
現在のアクティビティは、ライフサイクル中、他の強参照によって参照される必要があり、リサイクルされません。 Destroyed の場合、その参照は弱い参照によって参照され、次の GC でリサイクルされます。
現在の問題の説明から判断すると、質問の使用シナリオと目的がわかりません。必要なものが現在のアクティビティのオブジェクトであれば、それを取得すれば問題ありません。 Application でオブジェクトを保持していますが、それを解放したくありません。Application のライフサイクルはアプリと同じ長さです。オブジェクトを保持している場合、そのライフサイクルは短くなります。一般的に、registerActivityLifecycleCallbacks桟の管理を容易にするために、アクティビティActivityのときに参照を保持し、アクティビティ活动のときに参照を削除します。メモリリークを引き起こし、現在のアクティビティを操作することもできます。Destroy
Application
registerActivityLifecycleCallbacks
Activity
活动
Destroy
実際、後で誤解があったことが分かりました。弱い参照を使用してアクティビティ参照を保存しても、メモリ リークは発生せず、必要なときにアクティビティ参照がリサイクルされることもありません。質問で紹介された方法は非常に適しています。
現在のアクティビティは、ライフサイクル中、他の強参照によって参照される必要があり、リサイクルされません。
Destroyed の場合、その参照は弱い参照によって参照され、次の GC でリサイクルされます。
現在の問題の説明から判断すると、質問の使用シナリオと目的がわかりません。必要なものが現在のアクティビティのオブジェクトであれば、それを取得すれば問題ありません。
Application
でオブジェクトを保持していますが、それを解放したくありません。Application
のライフサイクルはアプリと同じ長さです。オブジェクトを保持している場合、そのライフサイクルは短くなります。一般的に、registerActivityLifecycleCallbacks
桟の管理を容易にするために、アクティビティActivity
のときに参照を保持し、アクティビティ活动
のときに参照を削除します。メモリリークを引き起こし、現在のアクティビティを操作することもできます。Destroy
実際、後で誤解があったことが分かりました。弱い参照を使用してアクティビティ参照を保存しても、メモリ リークは発生せず、必要なときにアクティビティ参照がリサイクルされることもありません。質問で紹介された方法は非常に適しています。