我目前正在研究 SQLiteDatabase 和相关类,目的是更好地理解它如何处理并发(我当前的解决方案有效,但我觉得我实际上可能在做多余的工作,因为它是在假设并发的情况下完成的不为我处理)。
对,关于 SQLiteOpenHelper 的 android 文档说明了以下关于 getWriteableDatabase 方法的内容
一旦打开成功,数据库就会被缓存,所以每次需要写入数据库时都可以调用这个方法。(确保在不再需要数据库时调用 close()。)
我有点不清楚正在缓存什么(所以我目前有一个为我做缓存的包装器)。那么,这里发生了什么?两个 SQLiteDatabase 实例是围绕缓存/静态实例包装的吗?
另外,实际的锁定是如何处理的?如果我有两个单独的 SQLiteDatabase 实例,由同一个 SQLiteOpenHelper 实例创建,那么这些是事务安全的吗?就像我在一个事务上以独占模式开始一个事务,然后在另一个线程中启动另一个事务,在另一个 SQLiteDatabase 实例上,我希望第二个事务在第一个事务完成之前不会启动。这是它的工作原理吗?