我正在创建一个与数据库进行大量交互的应用程序(读写操作).
为了避免在每个请求中打开/关闭操作,我创建了一个使用Singleton设计模式扩展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都是一样的,所以我认为在onPause()方法中调用close()是一个坏主意,因为实例将会在( onStart()方法的下一个Activity.此外,我无法检测到我的应用程序的结束,即当屏幕上没有任何活动可见时.
有人可以给我一些关于这个问题的帮助吗?当数据库与ONE活动相关联时,我发现了一些答案,但对我的情况没有提供任何真正的提示.