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; } }