2015-12-21 33 views
0

我的服务使用的单例类有问题。单身人士由2个服务人员进行通知。单身人士计算2个服务的2个变量。多个服务的Android单例

的问题是:

一个计数器只由第一服务和其他服务的第二个变量递增尽管它持有的两个变量是独生子。我不明白为什么这两个服务有不同的单例实例。

public static synchronized NotificationSingleton getInstance() { 

    if (mInstance == null) { 
     mInstance = new NotificationSingleton(); 
    } 
    return mInstance; 
} 

这应该返回单例的唯一实例。

+0

你如何访问你的单身人士? –

+0

Just with getInstance()。我做了一个打印,以显示是否创建了一个新实例,但只创建了一个实例。 – soMasu

+1

您的服务是否在同一个进程中运行(即:您的清单是否为您的服务定义了'android:process')?你的单例是否有任何非静态的嵌套类,你正在代码中的其他地方实例化?另外,你是如何发现/确认你的单身人士有多个实例的? –

回答

1

你的单身实现不是线程安全的。这可能是问题所在。你应该尝试与initialization on-demand holder

public class NotificationSingleton { 

    private static final class Holder { 
     private static final NotificationSingleton INSTANCE = new NotificationSingleton(); 
    } 

    public static NotificationSingleton getInstance() { 
     return Holder.INSTANCE; 
    } 

    private NotificationSingleton() {} 

} 
+0

请支持您的声明为什么原始代码段不是线程安全的。当然,这不是最高效的(因为它可以从双重检查锁定中受益),但是iirc,懒惰的初始化方法只会在Java 1.5以前的版本中出现微妙的错误。这些日子不应该成为一个问题了。 –

0

嗯,我会的答案写自己的问题:

的解决方案是将同样采用Android添加:过程=“名称”的所有服务的清单。他们都必须以相同的过程运行。