Android内存泄漏(三):单例

https://www.jianshu.com/p/25364c424095



问题:

单例持有Activity或其他Context的强引用

单例的生命周期和应用(Application)的生命周期一样长

当此Activity退出时,Activity应该被回收,可是这个单例持有这个activity的强引用,导致回收失败,所以造成内存泄漏。

 
 
public class GlobalManager { private volatile static GlobalManager instance; private Context mContext; private GlobalManager(Context context) { this.mContext = context; } public static GlobalManager getInstance(Context context) { if (instance == null) { synchronized (GlobalManager.class) { if (instance == null) { instance = new GlobalManager(context); } } } return instance; } }

解决方法:

我们不管传入的是Context还是ApplicationContext,我们都将它转换为ApplicationContext,这样这个单例就不会持有Activity或其他Context的强引用了


 
 
public class GlobalManager { private volatile static GlobalManager instance; private Context mContext; private GlobalManager(Context context) { this.mContext = context.getApplicationContext(); } public static GlobalManager getInstance(Context context) { if (instance == null) { synchronized (GlobalManager.class) { if (instance == null) { instance = new GlobalManager(context); } } } return instance; } }

猜你喜欢

转载自blog.csdn.net/u010898441/article/details/79154261