【问题标题】:Closing Android databases across Parallel Threads跨并行线程关闭 Android 数据库
【发布时间】:2015-07-13 14:25:42
【问题描述】:
我是根据我的应用程序中的一个问题提出这个问题的,对此我发现很难创建一个确切的问题。但我确实有线索。
我确实有并行线程正在运行,我的问题围绕在数据库上运行查询在初始化的数据库实例上返回 NullpointerException 的情况。
所以我想知道的是,如果您在 2 个并行线程中通过 db.getWritableDatabase() 初始化数据库实例,是否通过 db 在一个线程中关闭数据库。 close(),在另一个线程中关闭它?实际上跨应用程序级别?
【问题讨论】:
标签:
android
sqlite
nullpointerexception
parallel-processing
thread-safety
【解决方案1】:
您应该创建 SQLiteOpenHelper/db 的单例(您没有指定 db 是什么类),这将只返回一个实例,然后您可以检查 db 是否为关闭与否。
我有类似的问题,最后有 2 个并行线程和 1 个数据库?你在问问题。
您不能安全地同时对数据库进行 2 个操作。
/**
* Returns a writable database instance in order not to open and close many
* SQLiteDatabase objects simultaneously
*
* @return a writable instance to SQLiteDatabase
*/
public SQLiteDatabase getMyWritableDatabase() {
if ((db == null) || (!db.isOpen())) {
db = this.getWritableDatabase();
}
return db;
}
@Override
public void close() {
super.close();
if (db != null) {
db.close();
db = null;
}
}