单例模式,一般用于比较大,复杂的对象,只初始化一次,应该还有一个private的构造函数,使得不能用new来实例化对象,只能调用getInstance方法来得到对象,而getInstance保证了每次调用都返回相同的对象。为了简便而已,为了不让程序在实例化对象的时候,不用每次都用new关键字,索性提供一个instance方法,不必一执行这个类就初始化,这样做到不浪费系统资源!单例模式 可以防止 数据的冲突,节省内存空间
解决办法有两种
1、Context定义为弱引用,即
WeakReaference(Context) mContext= new WeakReference<> (context)
注意:被WeakReaference定义的变量,用的时候要先判断是否为空
2、Context引用getApplicationContext即可
单例模式,那么这个类的生命周期就伴随整个应用的生命周期,而它在被Activity创建的时候引用了Activity的Context,所以当系统GC的时候试图去回收Activity时,发现它却在被另一个任然在内存里的单例模式类所引用,所以GC回收它失败,从而导致了内存泄漏。
一个对象被回收, 必须满足两个条件:
1)没有任何引用指向它
2)GC被运行.