本篇博文主要介紹漫遊應用數據概覽、如何構建漫遊應用數據、構建漫遊應用數據最佳實踐。
漫遊應用數據概覽
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。
如果應用頻繁更改信息(例如,歌曲或電影中的最新位置),則請不要將漫遊應用數據用於此數據,而選取較不頻繁但仍可提供良好用戶體驗的表示。
例如,當前播放的歌曲、當前播放的電影章節等。
對於時間關鍵的重要設置,可使用優先級特別高的設置單位提供更爲頻繁的更新。
更多關於漫遊應用數據的介紹可參考:
2.漫遊應用數據指南;
3.管理應用程序數據;
MSDN中提供漫遊應用數據相關示例代碼:Application data sample。