【问题标题】:android room database lockedandroid房间数据库锁定
【发布时间】:2018-08-17 09:12:22
【问题描述】:

当我使用 3rd 方非线程安全的 sqlite 库时,我从生产中收到“android.database.sqlite.SQLiteDatabaseLockedException”异常。我检查了所有线程和连接关闭,我将所有实例设为单例,但我无法解决问题(我自己什至没有重现案例)。然后我将我的 orm 移动到完全线程安全的 Room 数据库。但是我仍然从生产中得到完全相同的错误。那么 Room db 线程不是安全的吗?它不是像谷歌提到的那样解决了对传统 sqlite 库的担忧吗?有没有人面临Room的数据库锁定错误?

【问题讨论】:

  • 这个问题不贴代码是不可能问的。如果您遇到相同的错误,您应该考虑错误是否真实,如果它是真实的,您的实现可能有问题。
  • FYI 面临同样的问题。
  • 你有解决办法吗?
  • 自从将 Room 更新到较新版本后,这个问题就从 Crashlytics 中消失了。我认为这是图书馆的问题

标签: android database android-room locked


【解决方案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://stackoverflow.com/a/63849367/3256989。 简而言之,在构建 RoomDatabase 时尽量使用enableMultiInstanceInvalidation()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多