SQLiteOpenHelper变量初始化/在整个应用程序中使用

时间:2014-04-27 03:23:56

标签: android

我对如何处理我的应用程序中的数据库有点担心,这基本上就是我所做的:

我有一个扩展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();
}

(...)

谢谢

1 个答案:

答案 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()