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 @   夜行过客  阅读(817)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示