Android sqlite并发无exception

Android上的Sqlite允许您从多个proc中访问数据库进行读取,但是如果您当前正在从一个进程写入,则从其他进程读取和写入将引发exception,因为第一次写入对db有锁定。

通过“procs”我指的是同一个应用程序中的其他线程。

有没有一种标准的方法让其他线程只是等到数据库再次可用,可能是指定的超时,而不是抛出exception?

预见到“你为什么这样做?” 答案,它就是我们这样做的方式,就是这样。 我们也不打算使用内容提供商。 只想要一种同步数据库访问的方法。

假设没有标准的方法,我们可能会围绕db调用编写一个包装器来进行一些线程同步。

只要您使用相同的SQLiteDatabase对象,就会为您完成同步。

因此,如果您通过单例访问对象,则应该没有问题。 如果要实现超时,可能还需要添加一些逻辑,例如wait / notify或类似的东西。

或者你可以使用另一个支持它的数据库,比如H2 。 我知道这可能听起来像个奇怪的想法。 但根据我的初步测试,它运行良好(在模拟器和设备上),实际上并不慢。 除了打开和关闭目前相当慢的数据库,大约1秒,但这有其他原因,并希望将在下一个版本中得到修复。