我有一个 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/