程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8風格應用開發入門 二十七 漫游應用數據

Windows 8風格應用開發入門 二十七 漫游應用數據

編輯:關於.NET

一、漫游應用數據概覽

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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved