安卓保存当前Activity http://droidyue.com/blog/2016... 这个第三种方法是我最满意的,在Application中采用registerActivityLifecycleCallbacks注册Activity声明周期回调,在resume回调中,使用弱引用保存Activity的引用,因为强引可能会引起内存泄露,但我觉得用弱引用也有问题,弱引用只要垃圾收集线程扫描到这个区域就会把内存回收,所以,如果弱引用指向的Activity被垃圾收集器回收了怎么办?
当前的Activity,在其生命周期内,应该是被其他的强引用引用着不会被回收。当其Destory后,其引用被一个弱引用引用着,然后在下一次的GC就会被回收了。
目前的问题描述来看我不清楚题主的使用场景和目的.如果你要的是当前Activity的对象,那你拿到了就ok了,该做些什么操作就去做,但是你想在Application中持有一个对象还不想释放...Application的生命周期和app一样长,你持有一个生命周期比你短的对象,肯定会造成内存泄漏.一般来说registerActivityLifecycleCallbacks是为了方便管理Activity桟,在Activity 活动时持有引用,在 Activity Destroy的时候去掉.这样就不会造成内存泄漏,也能操作当前的Activity.
Application
registerActivityLifecycleCallbacks
Activity
活动
Destroy
其实后面发现是自己理解错误,使用弱引用来保存Activity的引用是不会引起内存泄露的,也不会造成需要用的时候Activity的引用被回收了。题目中介绍的方法非常合适。
当前的Activity,在其生命周期内,应该是被其他的强引用引用着不会被回收。
当其Destory后,其引用被一个弱引用引用着,然后在下一次的GC就会被回收了。
目前的问题描述来看我不清楚题主的使用场景和目的.如果你要的是当前Activity的对象,那你拿到了就ok了,该做些什么操作就去做,但是你想在
Application
中持有一个对象还不想释放...Application
的生命周期和app一样长,你持有一个生命周期比你短的对象,肯定会造成内存泄漏.一般来说registerActivityLifecycleCallbacks
是为了方便管理Activity
桟,在Activity活动
时持有引用,在 ActivityDestroy
的时候去掉.这样就不会造成内存泄漏,也能操作当前的Activity.其实后面发现是自己理解错误,使用弱引用来保存Activity的引用是不会引起内存泄露的,也不会造成需要用的时候Activity的引用被回收了。题目中介绍的方法非常合适。