2

我的应用程序中有一个singleton类,它的定义有点像:

public class SingletonTest {
    private SingletonTest() {}

    private static SingletonTest instance = new SingletonTest();

    public static SingletonTest getInstance() {
        return instance;
    }
}

当我退出我的应用程序并再次打开时,instance它还没有被再次初始化,因为前一个没有被破坏并且仍在 JVM 中。但我想要的是每次进入我的应用程序时初始化静态字段。那么,我应该在onDestroy()方法中做什么呢?非常感谢!

4

2 回答 2

3

只要您的应用程序保留在内存中,您的静态变量就会保留在内存中。这意味着,静态变量将与您的应用程序一起自动销毁。

如果您想要一个新的单例实例,您将需要创建一个静态方法来重新初始化您的单例并在应用程序对象的 onStart 或您启动的第一个活动中调用它(或在您需要时调用它)

private Singleton() {}
private static Singleton mInstance;

//use this method when you want the reference
public static Singleton getInstance() {
    //initializing your singleton if it is null
    //is a good thing to do in getInstance because
    //now you can see if your singleton is actually being reinitialized.
    //e.g. after the application startup. Makes debugging it a bit easier. 
    if(mInstance == null) mInstance = new Singleton();

    return mInstance;
}

//and this one if you want a new instance
public static Singleton init() {
    mInstance = new Singleton();
    return mInstance;
}

应该这样做。

于 2013-04-14T03:34:20.500 回答
1

从您所说的来看,Singleton 似乎不适合您想做的事情。您应该声明一个实例变量,该变量将由方法onCreate()/onStart()onStop()/onDestroy().

请参阅此图了解活动生命周期。

来源:http: //developer.android.com/reference/android/app/Activity.html

于 2013-04-15T17:23:12.970 回答