我对如何处理我的应用程序中的数据库有点担心,这基本上就是我所做的:
我有一个扩展SQLiteOpenHelper
的自定义类,用于处理与DB的所有事务。
在我的应用中,我在此过程中创建,删除,隐藏或显示了一个Activity
和几个Fragments
。
在我需要修改或访问数据库的每个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();
}
(...)
谢谢
答案 0 :(得分:2)
我通常会在SQLiteDatabase
课程中创建一个Application
静态实例,并在整个应用中进行访问。
所以,我有一个自定义类,它在应用程序创建时返回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;
}
}
现在,您可以通过
从Activity或Fragment获取SQLiteDatabase
实例
MainApplication.getSQLiteInstance()