android: Context引起的内存泄露问题

 

错误的使用Context可能会导致内存泄漏,典型的例子就是单例模式时引用不合适的Context。

public class SingleInstance {
    private static SingleInstance sSingleInstance;
    private Context mContext;

    public SingleInstance(Context mContext) {
        this.mContext = mContext;
    }

    public static SingleInstance getInstance(Context context){
        if(sSingleInstance==null){
            sSingleInstance=new SingleInstance(context);
        }
        return sSingleInstance;
    }
}
如果使用getInstance传入的是Activity或者Service的实例,那么由于在应用退出之前创建的单例对象会一直存在并持有Activity或者Service的引用,回使Activity或者Service无法被垃圾回收从而导致内存泄漏。正确的做法是使用Application Context对象,因为它的生命周期是和应用一致的。
public class SingleInstance {
    private static SingleInstance sSingleInstance;
    private Context mContext;

    public SingleInstance(Context mContext) {
        this.mContext = mContext;
    }

    public static SingleInstance getInstance(Context context){
        if(sSingleInstance==null){
            sSingleInstance=new SingleInstance(context.getApplicationContext());//使用Application Context
        }
        return sSingleInstance;
    }
}

 

posted @ 2019-05-22 15:05  夜行过客  阅读(768)  评论(0编辑  收藏  举报