2015-12-27 93 views
1

我有一個Android手機應用程序通過數據項api將整個領域文件發送到磨損應用程序。有一個穿戴應用程序的服務來替換本地領域文件與從手持發送的最新的。問題是在運行時收到新的領域文件後,Wear應用程序的列表視圖不會得到更新。它確實顯示重新啓動磨損應用程序後的新數據。有沒有什麼辦法可以告訴域在運行時手動更改領域文件?當領域文件發生變化時,領域不會在運行時更新

回答

0

這是一個非常有趣的用例!

但是我害怕現在正在做的事情可能會導致意想不到的結果。

當穿戴應用程序打開領域(比如Realm-file-A)時,領域將打開一個文件描述符並使用它,直到它關閉。即使打開文件描述符,也可以使用file API/system命令刪除/覆蓋Realm文件。現在,當該文件被刪除並且Realm仍然被打開時,該應用程序仍然可以在沒有任何崩潰的情況下運行,這由操作系統保證。請參閱此question以瞭解此行爲。

因此,在你的情況下,由於磨損應用中的Realm沒有關閉(我猜),在Realm文件被另一個手持設備(比如說Realm-file-B)替換之後,所有已經打開的Realm實例應用程序仍會讀取/寫入前一個 - Realm-file-A。新創建的Realm實例將在Realm-file-B上運行。這個場景不是由Realm處理的,你可能會遇到奇怪的不一致問題。

所以建議是,在將整個Realm文件發送到磨損應用程序之前,請確保磨損應用程序中的所有Realm實例均已關閉。發送後,再次打開Realm實例,然後手動刷新列表視圖。

但是,Realm應該更好地支持這一點。爲跟蹤此https://github.com/realm/realm-java/issues/2007創建了一個問題。

+0

嗯,這是有道理的。我還沒有找到使同步任務更簡單的快速方法。我試圖序列化領域對象並在發生更改時每次發送它們。你認爲如果這是做同步的正確方法嗎? –

+0

您是否曾經需要更改可穿戴側的數據?我們確實支持iOS和watchOS之間的通知,但似乎Android可穿戴設備的體系結構完全不同,我們沒有可靠的方法使兩個域的Realm文件同步。如果雙方都想改變Realm數據,這可能會讓人頭疼。 – beeender

+0

是的,我只給予在可穿戴側插入新數據的能力。關於可穿戴設備的領域數據僅在從手持設備收到通知(由數據項api發送)後發生變化。用戶不能在沒有通知的情況下直接修改領域。我只是重構了在json中發送新的更改。有效。 –