首页 > 代码库 > 使用单例模式造成的内存泄漏
使用单例模式造成的内存泄漏
Android的单例模式在我们项目开发中经常会用到,不过使用的不恰当的话也会造成内存泄漏。因为单例的静态特性使得单例的生命周期和应用的生命周期一样长, 这就说明了如果一个对象已经不需要使用了,而单例对象还持有该对象的引用,那么这个对象将不能被正常回收,这就导致了内存泄漏。
Android中习惯使用单例的常见类: xxxManager , xxxHelper , xxxUtils 等
在MainActivity中使用此单例,代码如下:
我们来分析一下,为什么会内存泄漏呢?
AppManager appManager=AppManager.getInstance(this);
这句传入的是Activity的Context,我们都知道,Activty是间接继承于Context的,当这Activity退出时,Activity应该被回收, 但是单例中又持有它的引用,导致Activity回收失败,造成内存泄漏。
为了以防误传Activity的Context , 我们可以修改一下单例的代码,如下:
这样子修改,不管外面传入什么Context,最终都会使用Applicaton的Context,而我们单例的生命周期和应用的一样长,这样就防止了内存泄漏。
修改完毕后,运行代码,重复以上操作,将会发现leakCanary没有检测出泄漏。
使用单例模式造成的内存泄漏
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。