单例对象的生命周期是根据context变化,如果Context使用的是当前Activity或者Fragment中的上下文,则生命周期较短,因此,当生命周期较长的对象引用了“较短”的上下文,会出现这样的情况,当Context所属的Activity或者Fragment 生命周期结束时(可能执行了onDestroy),Java的垃圾回收机制尝试回收该Activity时发现该类还存在引用(单例对象持有了这个引用),则会引发内存泄漏,因此推荐使用context.getApplicationContext()(即生命周期较长的上下文).
对于不能获取到getApplicationContext的地方,可以采用弱引用WeakReference的方式;例如:以module依赖的形式存在于主项目中,因此不能使用Application这个类
解决由单例引起的内存泄漏问题
最新推荐文章于 2024-04-22 21:20:57 发布