当我使用第三方非线程安全的sqlite库时,我从生产中得到了“android.database.sqlite.SQLiteDatabaseLockedException”异常。我检查了所有线程和连接关闭,我使所有实例单例但我无法解决问题(我甚至没有自己重现案例)。然后我将我的orm移动到Room数据库,这是完全线程安全的。但我仍然从生产中得到完全相同的错误。所以不是Room db线程安全,并不是像谷歌提到的那样处理传统sqlite库的问题吗?是否有人面对数据库锁定错误与房间?
答案 0 :(得分:0)
尝试将日记模式设置为JournalMode.AUTOMATIC
。对我来说很好。
我的项目中的示例代码
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
MyDatabase.class, "myDatabase")
.addMigrations(MIGRATION_1_2)
.addCallback(sRoomDatabaseCallback)
.setJournalMode(JournalMode.AUTOMATIC)
.build();
答案 1 :(得分:0)
请检查https://stackoverflow.com/a/63849367/3256989。
简而言之,请在构建RoomDatabase时尝试使用enableMultiInstanceInvalidation()
。