美文网首页
单例模式 标准书写

单例模式 标准书写

作者: Boyko | 来源:发表于2017-03-22 14:54 被阅读0次
    private static volatile SettingsDbHelper sInst = null;  // <<< 这里添加了 volatile  
    public static SettingsDbHelper getInstance(Context context) {  
        SettingsDbHelper inst = sInst;  // <<< 在这里创建临时变量
        this.context = context.getApplicationContext();//获取Application的context避免内存泄漏
    
        if (inst == null) {
            synchronized (SettingsDbHelper.class) {
                inst = sInst;
                if (inst == null) {
                    inst = new SettingsDbHelper(this.context);
                    sInst = inst;
                }
            }
        }
        return inst;  // <<< 注意这里返回的是临时变量
    }
    

    通过这样修改以后,在运行过程中,除了第一次以外,其他的调用只要访问 volatile 变量 sInst 一次,这样能提高 25% 的性能

    Ps: 如果 this.context 不是 context.getApplicationContext(),而是 this.context = context , 那么当第一次调用的 activity 被销毁后,再次调用单例且有一些需要context 的逻辑,例如弹出dialog效果,将会显示不出来,需要注意.

    相关文章

      网友评论

          本文标题:单例模式 标准书写

          本文链接:https://www.haomeiwen.com/subject/ooyonttx.html