通过静态方法访问单例的字段

the*_*itz 5 java singleton static android

我有一个单身课程.

当访问类的方法时,我可以选择两种可能性.

  1. 将这些方法创建为特定于实例的,然后获取实例并调用它们
  2. 将这些方法创建为静态并调用它们,然后它们将获取实例

例如:

Class Test{

 private int field1;

 Test instance;

 private Test(){};

 private Test getInstance(){
    if (instance == null)
       instance = new Test();
    return instance;
 }

 public int method1() { return field1;}
 public static int method2() {return getInstance().field1;}
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以写别处

 int x = Test.getInstance().method1();
 int y = Test.method2();
Run Code Online (Sandbox Code Playgroud)

哪个更好?我可以想到第三种方法,我在静态方法中直接使用"instance",然后捕获异常,如果它是null并实例化它然后重新调用它自己.

从理论上讲,我可以让整个静止.但是,由于序列化不能保存静态,因此在将状态保存在活动结束时会产生问题.

zmb*_*mbq 2

我认为第一个更干净。

但是,请记住,在某些极端情况下,Android 可能会杀死您的静态实例。例如,请参阅: http: //code.google.com/p/acra/

我在某个地方找到了一个解决方法,就是从 Application 类中保留对单例的引用。但我不知道这是否能解决问题。