Android--Incorrect lazy initialization of static field.

Posted chaoyu168

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android--Incorrect lazy initialization of static field.相关的知识,希望对你有一定的参考价值。

private static ActivityLifeManager sInstance;
 
public static ActivityLifeManager getInstance() 
    if (sInstance == null) 
        sInstance = new ActivityLifeManager();
    
    return sInstance;

主要原因是线程安全问题。多线程有可能会对该方法调用造成实例化多次。在该方法加synchronized。

双重加锁可能存在的一个问题:

例如线程1已经分配了地址给instance 但是还没有初始化, 此时线程2 判断intance不是null 直接返回

解决:
volatile的:禁止指令重排序优化,也就保证了instance变量被赋值的时候对象已经是初始化过的,从而避免了上面说到的问题。

最终改为:

private static volatile ActivityLifeManager sInstance;
 
public static ActivityLifeManager getInstance() 
    if (sInstance == null) 
        synchronized (ActivityLifeManager.class) 
            if (sInstance == null) 
                sInstance = new ActivityLifeManager();
            
        
    
    return sInstance;

以上是关于Android--Incorrect lazy initialization of static field.的主要内容,如果未能解决你的问题,请参考以下文章