android - 当 Realm 文件更改时, Realm 不会在运行时更新

标签 android realm

我有一个 Android 手机应用程序通过数据项 API 将整个 Realm 文件发送到穿戴应用程序。 Wear 应用程序上有一项服务可以用手持设备发送的最新文件替换本地 Realm 文件。问题是在运行时收到新的 Realm 文件后,Wear 应用程序的 ListView 不会更新。它确实在重新启动 wear 应用程序后显示新数据。有什么方法可以告诉 Realm , Realm 文件是在运行时手动更改的吗?

最佳答案

这是一个非常有趣的用例!

但我担心你现在所做的事情可能会导致意想不到的结果。

当穿戴应用程序打开 Realm(比方说 Realm-file-A)时,Realm 将打开一个文件描述符并使用它直到它关闭。即使打开文件描述符,也可以使用文件 API/系统命令删除/覆盖 Realm 文件。现在,当文件被删除并且 Realm 仍然打开时,应用程序仍然可以运行而不会出现任何崩溃,这是由操作系统保证的。看这个question理解这种行为。

因此在您的情况下,由于穿戴应用程序中的 Realm 未关闭(我猜),在 Realm 文件被手持设备中的另一个文件替换后(比方说 Realm-file-B), Wear 应用程序中所有已打开的 Realm 实例仍将读取/写入前一个实例 -- Realm-file-A。新创建的 Realm 实例将在 Realm-file-B 上运行。 Realm 不处理这种情况,您可能会遇到奇怪的不一致问题。

所以建议是,在将整个 Realm 文件发送到 wear 应用程序之前,确保 wear 应用程序中的所有 Realm 实例都已关闭。发送后,再次打开Realm实例,手动刷新 ListView 。

然而,Realm 应该更好地支持这一点。创建问题以跟踪此 https://github.com/realm/realm-java/issues/2007 .

关于android - 当 Realm 文件更改时, Realm 不会在运行时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480728/

相关文章:

android - 保持 webView 包含在 Android 中?

android - 为什么我的 Realm 回收 View 不显示任何数据?

java - 从选定的列表项中选择一个 TextView

android - HashMap 访问同一个 ArrayList

java - 当我使用 Wea​​kReference 时,无法解析 android 上的符号消息

ios - 如何从 Realm 文件中删除一个类

ios - Realm swift : Shorten build compilation time

Android: 将 Android Studio 从 2.3.3 升级到 3.0 时出错

swift - Realm ;使将来迁移所需的可选属性

xamarin - 如何使用 Realm Xamarin 获取独立/非托管 RealmObject