一、漫游應用數據概覽
1.若應用當中使用了漫游應用數據,用戶可以很輕松的在不同的設備間保持應用數據的同步。
2.Windows會將更新的漫游數據同步到雲端,並將數據更新到其他安裝此應用的設備上。
3.Windows 限制了每個應用可漫游的應用數據大小。若我們的應用達到漫游數據大小的限制,在應用的總漫游數據再次少於該限制之前,不會將應用的任何數據更新到雲端,因此最好的做法是僅為用戶首選項、鏈接和小型數據文件使用漫游數據。
4.只要用戶在所需的時間間隔內從某個設備訪問應用的漫游數據,這些數據將存在雲端,若用戶不在比此時間間隔更長的時間內運行應用,漫游數據將從雲端刪除,若用戶卸載應用,漫游數據不會自動從雲中刪除,將會保留,若用戶在該時間間隔內重新安裝該應用,會從雲端同步漫游數據。注意:時間間隔指定為 30 天。
5.Windows會隨機漫游應用數據,並不保證即時同步。若用戶脫機或位於高延遲網絡中,則漫游可能會明顯延遲。那麼對於時間關鍵的重要設置,可使用優先級特別高的設置單位提供更為頻繁的更新。它僅限於名稱為“HighPriority”的一個特定設置單位。它可以是復合體,但總大小限於8KB。此限值不是強制性的,當超過此限值時,設置單位或設置復合體將被視為常規設置單位或復合體。
二、如何構建漫游應用數據
1.注冊漫游數據發生更改的事件,該事件為DataChanged事件。
void InitHandlers() { Windows.Storage.ApplicationData.Current.DataChanged += new TypedEventHandler<ApplicationData, object>(DataChangeHandler); } void DataChangeHandler(Windows.Storage.ApplicationData appData, object o) { // 更新數據 }
2.獲取應用的設置和文件容器。通常我們使用ApplicationData.RoamingSettings屬性可以獲取設置和ApplicationData.RoamingFolder屬性可以獲取文件。
Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings; Windows.Storage.ApplicationDataContainer roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder;
3.將數據寫入設置。
使用 ApplicationDataContainer.Values屬性進行簡單的數據寫入。
roamingSettings.Values["exampleSetting"] = "Hello World";
使用ApplicationDataCompositeValue對象進行復合設置。
Windows.Storage.ApplicationDataCompositeValue composite = new Windows.Storage.ApplicationDataCompositeValue(); composite["intVal"] = 1; composite["strVal"] = "string"; roamingSettings.Values["exampleCompositeSetting"] = composite;
使用ApplicationDataContainer.CreateContainer 方法可創建設置容器。
Windows.Storage.ApplicationDataContainer container = roamingSettings.CreateContainer("exampleContainer", Windows.Storage.ApplicationDataCreateDisposition.Always); if (roamingSettings.Containers.ContainsKey("exampleContainer")) { roamingSettings.Containers["exampleContainer"].Values["exampleSetting"] = "Hello World"; }
4.從設置中獲取數據。
獲取簡單的數據。
Object value = roamingSettings.Values["exampleSetting"];
獲取復合設置中的數據。
Windows.Storage.ApplicationDataCompositeValue composite = (Windows.Storage.ApplicationDataCompositeValue)roamingSettings.Values["exampleCompositeSetting"]; if (composite == null) { // No data } else { // Access data in composite["intVal"] and composite["strVal"] }
獲取容器中的數據。
bool hasContainer = roamingSettings.Containers.ContainsKey("exampleContainer"); bool hasSetting = false; if (hasContainer) { hasSetting = roamingSettings.Containers["exampleContainer"].Values.ContainsKey("exampleSetting"); }
5.從設置中刪除數據。
使用ApplicationDataContainerSettings.Remove方法刪除設置中數據。
roamingSettings.Values.Remove("exampleSetting");
6.將數據寫入文件。
使用Windows.Storage.StorageFolder.CreateFileAsync和Windows.Storage.FileIO.WriteTextAsync可在漫游應用數據存儲中創建和更新文件。
async void WriteTimestamp() { Windows.Globalization.DateTimeFormatting.DateTimeFormatter formatter = new Windows.Globalization.DatetimeFormatting.DateTimeFormatter("longtime"); StorageFile sampleFile = await roamingFolder.CreateFileAsync("dataFile.txt", CreateCollisionOption.ReplaceExisting); await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTime.Now)); }
7.從文件中獲取數據。
使用Windows.Storage.StorageFolder.GetFileAsync、Windows.Storage.StorageFile.GetFileFromApplicationUriAsync 和 Windows.Storage.FileIO.ReadTextAsync可在漫游應用數據存儲中打開和讀取文件。
async void ReadTimestamp() { try { StorageFile sampleFile = await roamingFolder.GetFileAsync("dataFile.txt"); String timestamp = await FileIO.ReadTextAsync(sampleFile); // Data is contained in timestamp } catch (Exception) { // Timestamp not found } }
三、構建漫游應用數據最佳實踐
應做事項:
1.將漫游用於首選項和自定義項。用戶總會選擇在每台設備上設置的所有應用漫游數據,例如用戶首選項,可包括:最喜愛的球隊、背景顏色自定義等等。
2.使用漫游數據允許用戶跨設備繼續執行任務。例如:閱讀文章時的上一次閱讀位置、游戲中級別或分數信息等等。
禁止事項:
1.請勿將漫游用於屬於本地設備的信息。
例如,PC 中本地文件資源的路徑名稱。此信息不應納入漫游應用數據,且必須保留作為本地設備信息。不過,你仍可決定漫游本地信息,但前提是萬一此信息在另一設備上無效,應用應能夠完美恢復此信息。
2.請勿使用漫游移動大的數據集
每個應用可以漫游的應用數據的大小存在限制。若應用達到此限制上限,則數據無法漫游,直到應用的總漫游應用數據再次小於該限制。因此最好的做法是將漫游局限於用戶首選項、鏈接和小數據文件。應用設計過程中,必須考慮如何為較大數據設置一個限制以免超過此限值,這一點至關重要。
例如,如果每保存一個游戲狀態需要 10KB,則應用可能僅允許用戶最多儲存 10 個游戲。
3.請勿將漫游用於即時同步,或用於更改頻繁的信息
Windows會隨機漫游應用數據,不會保證即時同步。
若用戶脫機或位於高延遲網絡中,則漫游可能會明顯延遲,所以請不要構建需要即時同步的UI。
如果應用頻繁更改信息(例如,歌曲或電影中的最新位置),則請不要將漫游應用數據用於此數據,而選取較不頻繁但仍可提供良好用戶體驗的表示。
例如,當前播放的歌曲、當前播放的電影章節等。
對於時間關鍵的重要設置,可使用優先級特別高的設置單位提供更為頻繁的更新。
MSDN中提供漫游應用數據相關示例代碼:Application data sample。