• 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;
        }
    }
  • 相关阅读:
    2019 icpc西安邀请赛 点分治
    2019ccpc 秦皇岛
    hdu 5354 树上点分治
    cf 632E FFT+快速幂
    hdu 4812 树分治+逆元+手写hashmap
    2019 上海网络赛G 手写哈希map+字符串hash
    2019 上海icpc网络赛 C FFT优化卷积+小范围暴力
    hdu 6198 杜教BM
    洛谷P3804 后缀自动机
    集合总结
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/10905991.html
Copyright © 2020-2023  润新知