【问题标题】: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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2011-06-20
      • 2021-01-27
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多