我正在创建一个与数据库进行大量交互的应用程序(读取和写入操作)。
为了避免在每次请求时进行打开/关闭操作,我创建了一个SQLiteOpenHelper
使用单例设计模式扩展的类。这样,我确信在整个应用程序生命周期(而不仅仅是活动SQLiteOpenHelper
生命周期)中,只有一个实例,并且只有一个与数据库的连接。
我还阅读了一些关于 ContentProvider 的文章,但我不确定这是一个更好的方法。
因此,这是我的 Singleton 类(onCreate
并onUpgrade
已删除)的主要逻辑:
public final class BaseSQLite extends SQLiteOpenHelper {
private static BaseSQLite mInstance = null;
private SQLiteDatabase db = null;
public static BaseSQLite getInstance(Context context) {
if (mInstance == null) {
mInstance = new BaseSQLite(context.getApplicationContext(),
DBNAME, DBVERSION);
}
return mInstance;
}
private BaseSQLite(final Context context, final String name,
final int version) {
super(context, name, null, version);
db = getWritableDatabase();
}
@Override
public synchronized void close() {
if (mInstance != null)
db.close();
}
public Cursor getAllData() {
String buildSQL = "SELECT * FROM myTable";
return db.rawQuery(buildSQL, null);
}
}
所以,为了访问我的数据库,我做了这个:
BaseSQLite baseSQLite = BaseSQLite.getInstance(context);
baseSQLite.getAllData();
它现在完美运行。但我的问题是关于close()
方法。我真的不知道什么时候打电话。实际上,我的数据库实例对于我的应用程序的每个 Activies 都是相同的,所以我认为调用close()
onPause() 方法是个坏主意,因为该实例可能(并且经常会发生)onStart()
在下一个活动。此外,我无法检测到end
我的应用程序,即当屏幕上不再可见任何活动时。
有人可以就这个问题给我一些帮助吗?当数据库链接到一个活动时,我找到了一些答案,但没有为我的案例提供真正的提示。