我有一个Android手机应用程序通过数据项api将整个领域文件发送到磨损应用程序。磨损应用程序上有一项服务,用于从掌上电脑发送的最新文件替换本地领域文件。问题是在运行时收到新的realm文件后,wear app上的列表视图不会更新。它在重新启动磨损应用程序后确实显示了新数据。有没有办法告诉领域在运行时手动更改领域文件?
答案 0 :(得分:1)
这是一个非常有趣的用例!
但我不敢说你现在正在做什么可能会导致意想不到的结果。
当磨损应用程序打开Realm(让我们说Realm-file-A
)时,Realm将打开一个文件描述符并使用它直到它关闭。即使打开文件描述符,也可以使用文件API /系统命令删除/覆盖Realm文件。现在,当文件被删除并且Realm仍然打开时,应用程序仍然可以正常工作而不会发生任何崩溃,这是由操作系统保证的。请参阅此question以了解此行为。
所以在你的情况下,因为穿戴app中的Realm没有关闭(我猜),在Realm文件被掌上电脑中的另一个文件替换之后(比如说Realm-file-B
),所有已经打开的Realm实例在磨损应用程序中仍将读取/写入前一个 - Realm-file-A
。新创建的Realm实例将在Realm-file-B
上运行。这个场景不是由Realm处理的,你可能会遇到奇怪的不一致问题。
所以建议是,在将整个Realm文件发送到wear应用程序之前,确保wear应用程序中的所有Realm实例都已关闭。发送后,再次打开Realm实例,并手动刷新列表视图。
然而,Realm应该更好地支持这一点。系统会创建一个问题来跟踪此https://github.com/realm/realm-java/issues/2007。