Sam*_*hou 4 java android android-room
比如说,我的应用程序中有一个精心构建的房间数据库。
我计划对数据库进行升级。然而,升级/数据迁移是巨大的,因此我想通过显示 UI 消息(例如 或AlertDialog等Toast)告诉用户要有耐心。
但我不知道如何检查是否需要消息来播放----我的意思是,我如何获取/检查他们当前的数据库版本?有没有类似RoomDatabase.getVersion(), 或RoomDatabase.isOlderVersion()/ 的函数RoomDatabase.isOutDated()?
另一方面,我知道还有Migration课。考虑到我只知道可以检查数据库版本,我打算这样做
- 在数据库中创建监听器持有者。
- 在UI Thread构建数据库之前,在其中注册一个监听器。
- 当
Migration被调用时,通知监听者去做事情。
但是,版本升级是不是太复杂了?还有更好的主意吗?
首先,我建议您隐藏后台线程中的所有迁移。如果应用程序生命周期中对数据库的第一次访问在后台执行,那么无论如何都会完成。
其次,如果您有任何 UI 线程与数据库一起工作,请尝试更改应用程序的逻辑,将对数据库的访问置于后台。
如果您仍然需要检查当前运行的数据库的版本,您可以从这里获取它:
database.openHelper.writableDatabase.version
或者
database.openHelper.readableDatabase.version
数据库是您之前使用构建器创建的数据库的实例。
顺便说一句,你如何创建实例?
我的问题可能是关于流程的自动化。
对于我来说,我在 Dagger2 中创建了一个数据库实例。我有调用构建器的提供者方法。我在那里添加迁移。此外,如果现有数据库的版本和新数据库的版本(更新后)不同,构建器会执行我提供的迁移。
如果您手动执行所有这些操作,我希望您不要忘记任何事情。
更新:
如果您想在不打开数据库的情况下知道版本,我建议使用最简单的方法。将数据库版本存储在Shared Preference. 在构建数据库实例之前获取它,并在开始迁移之前执行您想要的任何操作。
| 归档时间: |
|
| 查看次数: |
3449 次 |
| 最近记录: |