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