Singleton与Android中Database Helper类的静态内部类

我正在尝试查看哪些这些实现更适合在Android应用程序中访问sqlite数据库

实施1

使用扩展SqliteOpenHelper和使用单例模式的DatabaseHelper类。 在一些罕见的情况下,我确实看到崩溃,因为数据库被closures。 虽然有些恼人,但是我让他们通过,只是因为它在事物的macros伟计划和我拥有的项目数量上都很小。

public class DBHelper extends SQLiteOpenHelper { private static DBHelper instance; private final String CREATE_HEALTH_DATA_TABLE = "CREATE TABLE IF NOT EXISTS my_table ( " + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + MT_FIELD_NAME + " TEXT NOT NULL );"; private DBHelper getInstance(Context c) { if (instance == null) { instance = new DBHelper(c); } return instance; } private DBHelper(Context c) { super(c, "my_database.sqlite", null, 0); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} } 

实施2

实现这个的另一种方法是在Content Provider类中创build一个辅助类作为一个静态的内部类。 这是如何在示例中的记事本示例中完成的。

 public class DataProvider extends ContentProvider { /*..Content provider implementation only dbhelper variable and onCreate are shown */ private MTDBHelper dbHelper; @Override public boolean onCreate() { dbHelper = new DBHelper(getContext()); return true; } private static class DBHelper extends SqliteOpenHelper { /// Implementation without making it a singleton } } 

其中哪一个是更好的或标准的方式,为什么。 我猜这是第二种方法,因为它是一个内部的私人类,但希望有一个专家的意见。

如果有问题,我总是使用内容提供商。

谢谢

Solutions Collecting From Web of "Singleton与Android中Database Helper类的静态内部类"

我也没有。 我有一个扩展SqliteOpenHelper的非静态类。 每当我需要数据库,我打开它通过创build一个新的DBHelper实例,做我需要做的,并立即closures它,稍后重新打开,只有当我需要它。 在这个实现中,有两个代码段可以同时修改数据库。 为了避免这种情况,请将每个方法包装在同步块中 我对这种方法没有任何问题。