Android Room:获取当前数据库版本/检查是否已过时

Sam*_*hou 4 java android android-room

比如说,我的应用程序中有一个精心构建的房间数据库。

我计划对数据库进行升级。然而,升级/数据迁移是巨大的,因此我想通过显示 UI 消息(例如 或AlertDialogToast)告诉用户要有耐心。

但我不知道如何检查是否需要消息来播放----我的意思是,我如何获取/检查他们当前的数据库版本?有没有类似RoomDatabase.getVersion(), 或RoomDatabase.isOlderVersion()/ 的函数RoomDatabase.isOutDated()

另一方面,我知道还有Migration课。考虑到我只知道可以检查数据库版本,我打算这样做

  1. 在数据库中创建监听器持有者。
  2. 在UI Thread构建数据库之前,在其中注册一个监听器。
  3. Migration被调用时,通知监听者去做事情。

但是,版本升级是不是太复杂了?还有更好的主意吗?

Rel*_*oul 6

首先,我建议您隐藏后台线程中的所有迁移。如果应用程序生命周期中对数据库的第一次访问在后台执行,那么无论如何都会完成。

其次,如果您有任何 UI 线程与数据库一起工作,请尝试更改应用程序的逻辑,将对数据库的访问置于后台。

如果您仍然需要检查当前运行的数据库的版本,您可以从这里获取它:

database.openHelper.writableDatabase.version

或者

database.openHelper.readableDatabase.version

数据库是您之前使用构建器创建的数据库的实例。

顺便说一句,你如何创建实例?

我的问题可能是关于流程的自动化。

对于我来说,我在 Dagger2 中创建了一个数据库实例。我有调用构建器的提供者方法。我在那里添加迁移。此外,如果现有数据库的版本和新数据库的版本(更新后)不同,构建器会执行我提供的迁移。

如果您手动执行所有这些操作,我希望您不要忘记任何事情。

更新:

如果您想在不打开数据库的情况下知道版本,我建议使用最简单的方法。将数据库版本存储在Shared Preference. 在构建数据库实例之前获取它,并在开始迁移之前执行您想要的任何操作。

  • 所以,这里的主要问题是:如何在打开数据库之前检查数据库的版本?正确的? (2认同)