Windows 8スタイルアプリケーションの高速構築27-ローミングアプリケーションデータ

8976 ワード

このブログでは、ローミングアプリケーションデータの概要、ローミングアプリケーションデータの構築方法、ローミングアプリケーションデータの構築のベストプラクティスについて説明します.
ローミングアプリケーションデータの概要
1.アプリケーションにローミングアプリケーションデータが使用されると、ユーザは異なるデバイス間でアプリケーションデータの同期を容易に維持することができる.
2.Windowsは更新されたローミングデータをクラウドに同期し、このアプリケーションをインストールしている他のデバイスにデータを更新します.
3.Windowsでは、アプリケーションごとにローミング可能なアプリケーションデータのサイズが制限されています.アプリケーションがローミング・データのサイズに制限されている場合、アプリケーションの総ローミング・データがこの制限を下回るまで、アプリケーションのデータはクラウドに更新されません.したがって、ユーザー・プリファレンス、リンク、およびスモール・データ・ファイルのみにローミング・データを使用するのが最善です.
4.ユーザーが必要な時間間隔内にある設備からアプリケーションのローミングデータにアクセスする限り、これらのデータはクラウドに存在し、ユーザーがこの時間間隔より長い時間内にアプリケーションを実行しなければ、ローミングデータはクラウドから削除され、ユーザーがアプリケーションをアンインストールすれば、ローミングデータは自動的にクラウドから削除されず、保留され、ユーザーがこの時間間隔内にアプリケーションを再インストールすれば、クラウドからローミングデータが同期されます.注意:間隔は30日として指定します.
5.Windowsはアプリケーションデータをランダムにローミングし、即時同期は保証されません.ユーザがオフラインまたは高遅延ネットワークに存在する場合、ローミングは著しく遅延する可能性があります.では、時間の重要な設定については、特に優先度の高い設定単位を使用して、より頻繁な更新を提供することができる.「HighPriority」という名前の特定の設定単位に限定されます.複合体であってもよいが、総サイズは8 KBに限られる.この制限値は強制的ではありません.この制限値を超えると、単位を設定するか、複合体を設定するかは、通常の設定単位または複合体とみなされます.
ローミングアプリケーションデータの構築方法
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.Valueプロパティを使用して、簡単なデータ書き込みを行います.

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.ローミングで大きなデータセットを移動しない
各アプリケーションがローミングできるアプリケーションデータのサイズには制限があります.アプリケーションがこの制限の上限に達すると、アプリケーションの総ローミングアプリケーションデータがこの制限よりも小さくなるまで、データはローミングできません.したがって、ローミングをユーザープリファレンス、リンク、およびスモールデータファイルに限定するのが最善です.設計を適用するには、この限界値を超えないように、大きなデータに制限を設定する方法を考慮する必要があります.
例えば、1ゲームの状態を保存するごとに10 KBが必要である場合、アプリケーションは、ユーザが最大10ゲームを保存できるようにすることができる.
3.ローミングをインスタント同期に使用したり、頻繁な情報を変更したりしないでください.
Windowsはアプリケーションデータをランダムにローミングし、即時同期は保証されません.
ユーザがオフラインまたは高遅延ネットワークにいる場合、ローミングは大幅に遅延する可能性がありますので、インスタント同期が必要なUIを構築しないでください.
歌や映画の最新の場所など、頻繁に情報を変更する場合は、ローミングアプリケーションデータをこのデータに使用しないで、頻繁ではありませんが、良好なユーザー体験を提供する表示を選択してください.
たとえば、現在再生されている曲、現在再生されている映画の章などです.
時間キーの重要な設定では、特に優先度の高い設定単位を使用して、より頻繁に更新できます.
ローミングアプリケーションデータの詳細については、以下を参照してください.
1.クイックスタート:アプリケーションデータのローミング;
2.ローミングアプリケーションデータガイド;
3.アプリケーションデータの管理;
MSDNでローミングアプリケーションデータに関するサンプルコードを提供する:Application data sample.