安卓保存当前Activity http://droidyue.com/blog/2016...
这个第三种方法是我最满意的,在Application中采用registerActivityLifecycleCallbacks注册Activity声明周期回调,在resume回调中,使用弱引用保存Activity的引用,因为强引可能会引起内存泄露,但我觉得用弱引用也有问题,弱引用只要垃圾收集线程扫描到这个区域就会把内存回收,所以,如果弱引用指向的Activity被垃圾收集器回收了怎么办?
ringa_lee2017-04-18 09:16:24
目前的Activity,在其生命週期內,應該是被其他的強引用引用著不會被回收。
當其Destory後,其引用被一個弱引用引用著,然後在下一次的GC就會被回收了。
怪我咯2017-04-18 09:16:24
目前的問題描述來看我不清楚題主的使用場景和目的.如果你要的是當前Activity的對象,那你拿到了就ok了,該做些什麼操作就去做,但是你想在Application
中持有一个对象还不想释放...Application
的生命周期和app一样长,你持有一个生命周期比你短的对象,肯定会造成内存泄漏.一般来说registerActivityLifecycleCallbacks
是为了方便管理Activity
桟,在Activity 活动
时持有引用,在 Activity Destroy
的時候去掉.這樣就不會造成內存洩漏,也能操作當前的Activity.
PHPz2017-04-18 09:16:24
其實後面發現是自己理解錯誤,使用弱引用來保存Activity的引用是不會引起內存洩漏的,也不會造成需要用的時候Activity的引用被回收了。題目中介紹的方法非常適合。