Java 在AOSP、Android中定义单例

Java 在AOSP、Android中定义单例,java,android,singleton,android-source,Java,Android,Singleton,Android Source,我正在开发一个自定义AOSP rom。因此,我修改了一些系统类并创建了新类。我的问题是定义一个单例类。使用这种模式,我们可以为每个请求创建一个对象,不是吗?但不知何故,当我构建aosp时,我看到为每个Android应用程序生成了不止一个相同的类 public final Singleton{ private static Singleton singleton; private int peakValue = -1; private Singleton(){} public stat

我正在开发一个自定义AOSP rom。因此,我修改了一些系统类并创建了新类。我的问题是定义一个单例类。使用这种模式,我们可以为每个请求创建一个对象,不是吗?但不知何故,当我构建aosp时,我看到为每个Android应用程序生成了不止一个相同的类

public final Singleton{
 private static Singleton singleton;
 private int peakValue = -1;

 private Singleton(){}

 public static Singleton getInstance(){
  if(singleton == null)
    singleton = new Singleton();
  return singleton;
 }

 public int getPeakValue(){
    return getInstance().peakValue;
 }

 public void setPeakValue(int val){
   getInstance().peakValue = val; 
 }

}
在logcat

........ApplicationName1 : .......Singleton@1000abafe1
........ApplicationName2 : .......Singleton@1000abafee
所以,当我调用
Singleton.getInstance().getPeakValue()时
它返回
null
,即使我已经设置了值

有人能帮我吗?
如何定义单例?

创建一个包含单例并绑定到它的服务。那么一次只有一个服务实例


每个应用程序都有自己的JVM,这就是您的方法不起作用的原因

你能分享或给出一个例子吗?如果我定义了一个服务,并在设置singleton的地方将int值绑定到它,那么我能在任何类或应用程序中通过getInstance获得这个值吗?@reigeki你必须通过system_server公开一个服务才能分享这个值。即使您有一个单例程序,每个应用程序都有自己的进程和虚拟机,因此单例程序只适用于正在运行的进程。了解像LocationManagerService这样的服务是如何工作的,然后查看SystemServer.java以添加该服务。然后,您的应用程序必须调用该服务以获取共享值。