android房间数据库锁定
Posted
技术标签:
【中文标题】android房间数据库锁定【英文标题】:android room database locked 【发布时间】:2018-08-17 09:12:22 【问题描述】:当我使用 3rd 方非线程安全的 sqlite 库时,我从生产中收到“android.database.sqlite.SQLiteDatabaseLockedException”异常。我检查了所有线程和连接关闭,我将所有实例设为单例,但我无法解决问题(我自己什至没有重现案例)。然后我将我的 orm 移动到完全线程安全的 Room 数据库。但是我仍然从生产中得到完全相同的错误。那么 Room db 线程不是安全的吗?它不是像谷歌提到的那样解决了对传统 sqlite 库的担忧吗?有没有人面临Room的数据库锁定错误?
【问题讨论】:
这个问题不贴代码是不可能问的。如果您遇到相同的错误,您应该考虑错误是否真实,如果它是真实的,您的实现可能有问题。 FYI 面临同样的问题。 你有解决办法吗? 自从将 Room 更新到较新版本后,这个问题就从 Crashlytics 中消失了。我认为这是图书馆的问题 【参考方案1】:尝试将日记模式设置为JournalMode.AUTOMATIC
。对我来说效果很好。
我的项目中的示例代码
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
MyDatabase.class, "myDatabase")
.addMigrations(MIGRATION_1_2)
.addCallback(sRoomDatabaseCallback)
.setJournalMode(JournalMode.AUTOMATIC)
.build();
Android Room Database Journal Mode
【讨论】:
根据官方文档:JournalMode.AUTOMATIC 是未指定显式值时的默认值。当设备运行 API Level 低于 16 或它是低 RAM 设备时,实际值为 TRUNCATE .否则,将使用 WRITE_AHEAD_LOGGING。【参考方案2】:请检查https://***.com/a/63849367/3256989。
简而言之,在构建 RoomDatabase 时尽量使用enableMultiInstanceInvalidation()
。
【讨论】:
以上是关于android房间数据库锁定的主要内容,如果未能解决你的问题,请参考以下文章