我很欣赏Android中单例的优点和缺点以及它们的各种参数以及创建对象的单例实例或应用程序本身,但它满足了我需要将数据库管理器外观的单个实例用于应用。
在搜索各个地方以寻找最佳方法后,我找到了以下代码。但是findbugs并不喜欢我对静态实例的'this'赋值。
这个类并不完全遵循标准的单例方法,但据推测这是一种更好的方法,它基于只有一个应用程序创建并且方法调用顺序已知的知识。任何人都可以告诉我这段代码是错误的还是让我知道如何绕过findbug问题,如果它实际上是一个问题。我突出了这个错误行。
public class DatabaseApplication extends Application {
private static DatabaseApplication instance; //the single instance of this app
private DataManager dataManager; //the database facade, again a single instance
public static DatabaseApplication getInstance() {
return instance;
}
/**
* onCreate will always be called before this.
*
* @return data manager, effectively a singleton too
*/
public DataManager getDataManager() {
return dataManager;
}
/*
* onCreate only called when app is created by the system
*
* @see android.app.Application#onCreate()
*/
@Override
public void onCreate() {
super.onCreate();
//Bug: Write to static field
//DatabaseApplication.instance from instance method
//DatabaseApplication.onCreate()
instance = this;
instance.initializeInstance();
}
/**
* Create the one and only dataManager
*/
protected void initializeInstance() {
dataManager = new DataManager(this, false);
}
}