我的应用程序中有一个中央数据库,需要访问一些不同的活动。
我应该通过使其静态来共享此对象吗?例如,在初始化DB的活动中,我这样做:
protected static appDatabase db;
然后其他人可以通过FirstActivity.db
访问它。
另一种选择是在每个需要它的活动中创建private appDatabase db
个对象,但我怀疑打开多个数据库对象来访问相同的存储数据可能会浪费。
但是我不太了解java,这就是我要问的原因 - 这样做的首选方法是什么,为什么?
由于
答案 0 :(得分:4)
你可以像这样使用单身;
private static DataHelper singleton;
public static DataHelper getDataHelper(Context context) {
if (singleton == null) {
singleton = new DataHelper(context);
OpenHelper openHelper = new OpenHelper(singleton.context);
singleton.db = openHelper.getWritableDatabase();
}
if(!singleton.db.isOpen()){
OpenHelper openHelper = new OpenHelper(singleton.context);
singleton.db = openHelper.getWritableDatabase();
}
singleton.context = context;
return singleton;
}
private DataHelper(Context context) {
this.context = context;
}
并像这样打电话给你的单身人士课程;
public DataHelper dh;
this.dh = DataHelper.getDataHelper(this);
答案 1 :(得分:1)
我使用Application类和同步数据库对象管理来处理这种情况。这是一个例子。 [synchronized]限定符是多线程应用程序中的关键。
根据定义,Application对象是Android中的Singleton。
public class App extends Application
{
private static App _instance;
private AppLocalStorage _localStorage;
@Override
public void onCreate()
{
super.onCreate();
_instance = this;
}
public static App getInstance()
{
//Exposes a mechanism to get an instance of the
//custom application object.
return _instance;
}
public synchronized AppLocalStorage getDatabase()
{
if (_localStorage == null)
{
_localStorage = new AppLocalStorage(this);
}
return _localStorage;
}
}