我对如何在我的应用程序中处理我的数据库有一点担心,这是我基本做的事情:
我有一个扩展SQLiteOpenHelper的自定义类,它处理与DB的所有事务。
在我的应用程序中,我有一个单独的Activity和几个Fragments,它们在这个过程中被创建、删除、隐藏或显示。
在我需要修改或访问DB数据的每个Fragment中,我都声明了一个静态变量:
private static DatabaseHandler mDB;我在onCreate()方法上这样初始化它:
mDB = DatabaseHandler.getInstance(getActivity());所有这些都在起作用,我关心的是变量本身,在我所有的自定义片段类中将其声明为静态变量是不是一个好主意?
我也以同样的方式使用包含mParams = Parameters.getInstance(getActivity());的应用程序的主要参数的类,我应该也将其声明为静态吗?
我希望避免内存泄漏和NPE,但我不确定什么是正确的处理方法。
仅供参考,我的DatabaseHandler课程的开始:
public class DatabaseHandler extends SQLiteOpenHelper {
private static DatabaseHandler sInstance = null;
(...)
private Resources mResources;
public static DatabaseHandler getInstance(Context context) {
if (sInstance == null) {
sInstance = new DatabaseHandler(context);
}
return sInstance;
}
private DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mResources = context.getResources();
}
(...)谢谢
发布于 2014-04-27 11:44:38
我通常在我的Application类中创建一个SQLiteDatabase静态实例,并在整个应用程序中进行访问。
因此,我有一个自定义类,它在应用程序创建时返回SQLiteDatabase实例。
这是我的应用程序类
public class MainApplication extends Application {
private static SQLiteDatabase mSQLiteDatabase = null;
@Override
public void onCreate(){
super.onCreate();
SQLiteAsyncTask sqLiteAsyncTask = new SQLiteAsyncTask(getApplicationContext());
mSQLiteDatabase = (SQLiteDatabase) sqLiteAsyncTask.loadInBackground();
}
// method to get the sqlite db instance
public SQLiteDatabase getSQLiteInstance(){
return mSQLiteDatabase;
}
}现在,您可以通过以下方式从活动或片段获取SQLiteDatabase实例
MainApplication.getSQLiteInstance()https://stackoverflow.com/questions/23319005
复制相似问题