跨平行线程关闭Android数据库

时间:2015-07-13 14:25:43

标签: android sqlite nullpointerexception parallel-processing thread-safety

我在我的应用程序中遇到问题时会问这个问题,我发现很难创建一个确切的问题。但我确实有领先优势。

我确实有并行线程在运行,我的问题围绕着在数据库上运行查询在初始化数据库实例上返回 NullpointerException 的情况。

所以我想知道的是,如果你在2个并行线程中通过 db.getWritableDatabase()初始化数据库实例,那么通过 db在一个线程中关闭数据库。 close(),在另一个帖子中关闭它?在整个应用程序级别?

1 个答案:

答案 0 :(得分: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;
    }
}