原文:快速构建Windows 8风格应用27-漫游应用数据

本篇博文主要介绍漫游应用数据概览、如何构建漫游应用数据、构建漫游应用数据最佳实践。

一、漫游应用数据概览

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.CreateFileAsyncWindows.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.GetFileAsyncWindows.Storage.StorageFile.GetFileFromApplicationUriAsyncWindows.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。

如果应用频繁更改信息(例如,歌曲或电影中的最新位置),则请不要将漫游应用数据用于此数据,而选取较不频繁但仍可提供良好用户体验的表示。

例如,当前播放的歌曲、当前播放的电影章节等。

对于时间关键的重要设置,可使用优先级特别高的设置单位提供更为频繁的更新。

更多关于漫游应用数据的介绍可参考:

1.快速入门:漫游应用程序数据

2.漫游应用数据指南;

3.管理应用程序数据;

MSDN中提供漫游应用数据相关示例代码:Application data sample

快速构建Windows 8风格应用27-漫游应用数据的更多相关文章

  1. 快速构建Windows 8风格应用28-临时应用数据

    原文:快速构建Windows 8风格应用28-临时应用数据 本篇博文主要介绍临时应用数据概览.如何构建临时应用数据. 一.临时应用数据概览 临时应用数据相当于网页中缓存,这些数据文件是不能够漫游的,并 ...

  2. 快速构建Windows 8风格应用26-本地应用数据

    原文:快速构建Windows 8风格应用26-本地应用数据 本篇博文主要介绍如何获取应用的设置和文件容器.如何将数据写入设置.如何从设置中获取数据.如何删除设置中数据.如何将数据写入文件.如何从文件中 ...

  3. 快速构建Windows 8风格应用32-构建辅助磁贴

    原文:快速构建Windows 8风格应用32-构建辅助磁贴 引言 Windows Phone中,我们开发者可能会开发的一个功能点是将数据列表中某一项"Pin To Start(固定到开始屏幕 ...

  4. 快速构建Windows 8风格应用17-布局控件

    原文:快速构建Windows 8风格应用17-布局控件 本篇博文主要介绍三种常用的布局控件:Canvas.Grid.StackPanel. Panel类是开发Windows 8 Store应用中一个重 ...

  5. 快速构建Windows 8风格应用15-ShareContract构建

    原文:快速构建Windows 8风格应用15-ShareContract构建 本篇博文主要介绍共享数据包.如何构建共享源.如何构建共享目标.DataTransferManager类. 共享数据包 Da ...

  6. 快速构建Windows 8风格应用14-ShareContract概述及原理

    原文:快速构建Windows 8风格应用14-ShareContract概述及原理 本篇博文主要介绍Share Contract概述.Share Contract实现原理.实现Share Contra ...

  7. 快速构建Windows 8风格应用13-SearchContract构建

    原文:快速构建Windows 8风格应用13-SearchContract构建 本篇博文主要介绍如何在应用中构建SearchContract,相应的原理已经在博文<快速构建Windows 8风格 ...

  8. 快速构建Windows 8风格应用9-竖直视图

    原文:快速构建Windows 8风格应用9-竖直视图 本篇博文主要介绍竖直视图概览.关于竖直视图设计.如何构建竖直视图 竖直视图概览 Windows 8为了支持旋转的设备提供了竖屏视图,我们开发的应用 ...

  9. 快速构建Windows 8风格应用10-设备方向

    原文:快速构建Windows 8风格应用10-设备方向 本篇博文主要介绍常用支持Windows 8操作系统设备的方向.如何获取当前设备方向.DisplayProperties类. 常用支持Window ...

随机推荐

  1. MEF初体验之三:Exports声明

    组合部件通过[ExportAttribute]声明exports.在MEF中,有这么几种成员可声明exports的方式:组合部件(类).字段.属性和方法.我们来看下ExportAttribute类的声 ...

  2. nginx 1.4.2 安装笔记

    顺便吐槽一下,有道笔记的排版太难用了, 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 ========================================== ...

  3. SpringMVC源代码深度分析DispatcherServlet核心的控制器(初始化)

    SpringMVC是非常优秀的MVC框架,每一个框架都是为了我们提高开发效率,我们试图通过对SpringMVC的源码去了解这个框架,了解整个设计思想,框架要有扩展性,这里用的比較多是接口和抽象,是框架 ...

  4. 【JAVA】【NIO】5、Java NIO Scatter / Gather

    标题手段Java NIO该分散体浓缩 Java NIO内置支持分散与收集.的概念主要用于信道分散聚集的读写. 读出的分散体的一个通道被读多个数据buffer在.因此.数据分散到多个buffer中. 对 ...

  5. Java里泛型有什么作用

    1 泛型赋予了类型參数式多态的能力 2 泛型的第一个优点是编译时的严格类型检查,提高了程序的安全性和健壮性,这是集合框架最重要的特点. 3 泛型消除了绝大多数的类型转换.假设没有泛型,当你使用集合框架 ...

  6. paip.自适应网页设计 同 响应 与设计的原理的差and实践总结

    paip.自适应网页设计 同 响应 与设计的原理的差and实践总结 响应式Web设计(Responsive Web design)的理念是: 1 #-----------自适应布局VS响应式布局 2 ...

  7. 编译的依赖不能vs的release工程

    前言: 今天,我们正在做一个ocx插件的时候,放到刚装好win7系统的虚拟机上面注冊,弹出以下的一个错误提示: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ ...

  8. Controller 里面就只应该存放这些不能复用的代码(转)

    MVC 的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写.它表示的是一种常见的客户端软件开发框架 ...

  9. bzoj 2109 &amp; 2535 空中管制 解读

    [] [分析]小猪真的是一个很好的问题.我认为这是一个问题洪水.建立拓扑后(便! ).直接把最外层设定序号为1,第二层为2.bfs下去就可以. . . 结果发现:飞行序号不能同样.. . 于是開始想. ...

  10. 【Java】【jquery】ajax垃圾问题

    1.暗示HTML.JSP文件本身使用UTF-8格公式 2.HTML的head加: <META http-equiv="Content-Type" content=" ...