mit*_*rop 14 android android-lifecycle sqliteopenhelper android-sqlite
我正在创建一个与数据库进行大量交互的应用程序(读写操作).
为了避免在每个请求中打开/关闭操作,我创建了SQLiteOpenHelper一个使用Singleton设计模式扩展的类.这样,我确信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);
}
}
Run Code Online (Sandbox Code Playgroud)
所以,为了访问我的数据库,我做了这个:
BaseSQLite baseSQLite = BaseSQLite.getInstance(context);
baseSQLite.getAllData();
Run Code Online (Sandbox Code Playgroud)
它现在完美地运作.但我的问题是关于这个close()方法.我真的不知道什么时候打电话.实际上,我的数据库实例对于我的应用程序的每个Activies都是相同的,所以我认为调用close()onPause()方法是个坏主意,因为实例将潜在地(并且经常会发生)在onStart()方法中重新创建.下一个活动.此外,我无法检测到end我的应用程序,即当屏幕上再也看不到任何活动时.
有人可以帮我解决这个问题吗?当数据库链接到一个活动时,我找到了一些答案,但没有为我的案例提供真正的提示.
每当您完成对数据库的写入时,您都应该调用 close 。例如,当您插入数据时,您将有一个与数据库的打开连接,完成后应将其关闭。
读书不一样。当您在手机上创建 SQLite 数据库时,数据是持久的。数据库存在,您创建的处理程序提供了一种访问该信息的便捷方法。读取数据库通常是通过获取数据库的可读实例并使用 aCursor来提取值来进行的。在这种情况下,完成后您将关闭游标,而不是数据库本身。
您是对的,您不应该在单独活动的生命周期方法期间关闭数据库连接。相反,如上所述,在执行完该事务后,请在写入数据库的处理程序方法中关闭数据库连接。
| 归档时间: |
|
| 查看次数: |
8486 次 |
| 最近记录: |