单例模式 标准书写

2017-03-22  本文已影响0人  Boyko
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效果,将会显示不出来,需要注意.

上一篇下一篇

猜你喜欢

热点阅读