保持ContentResolver和SQLiteDatabase中的数据库查询不会相互阻塞

时间:2013-06-05 00:21:36

标签: android android-sqlite android-contentresolver

我的应用程序运行一些非常复杂的查询,使用连接和Android ContentResolver无法处理的其他东西。其中一些查询,插入等可以阻止UI线程,因此我在后台运行它们。正如您可能猜到的,当两个sql请求的时间彼此重合时,这可能导致SQLiteException(数据库被锁定)(最常见的原因是当用户请求查看时数据从后台服务器加载到我的数据库中)来自屏幕上数据库的数据。)

解决此问题的最佳方法是将所有数据库活动保留在一个线程上,但正如我上面所述,某些插入特别会导致一些大的时间UI线程阻塞,所以这不太现实。我见过的另一个选项是同步ContentResolver的所有方法(它们都应该像DatabaseHelper一样共享一个公共成员变量)。我已经完成了这个,但是,这还不够,因为对于某些方法,我必须使用SQLiteDatabase对象的rawQuery()方法来获取我需要获取数据的sql。

是否有人知道我可以用来同步ContentResolver方法和SQLiteDatabase方法的策略?非常感谢!

1 个答案:

答案 0 :(得分:0)

我会在交易中进行长插入

    db.beginTransaction();
    try {

        db.setTransactionSuccessful();
    } finally {
        db.endTransaction();
    }

如果您不希望用户在插入期间发出的请求返回空内容,请实现重试逻辑。

这不会起作用吗?