当前位置: 首页 > 编程日记 > 正文

快速构建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.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。

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

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

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

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

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

2.漫游应用数据指南;

3.管理应用程序数据;

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




 本文转自 王祖康 51CTO博客,原文链接:http://blog.51cto.com/wzk89/1065449,如需转载请自行联系原作者


相关文章:

jquery和css3打造超梦幻的三维动画背景

今天为大家带来的是一款由jquery和css3实现的超级梦幻的背景效果。绿色的小原点由远到近&#xff0c;由近到远一种飞跃效果。效果非常好看&#xff0c;我们一起看下效果图&#xff1a; 在线预览 源码下载 我们一起看下实现的代码。这是一款由jquey和css3实现的效果。这里引用…

C#时间函数扩展

//本周是本年第几周 private int DatePart(System.DateTime dt) { int weeknow Convert.ToInt32(dt.DayOfWeek);//今天星期几 int daydiff (-1) * (weeknow1);//今日与上周末的天数差 int days System.DateTime.Now.AddDays(daydiff).DayOfYear;//上周末是本年第几天 i…

“我被机器解雇了!”Amazon 63岁员工因算法评分太低被自动开除

整理 | Carol出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;“我被一个机器解雇了。”63岁“老司机”因跟踪算法被开除一觉醒来&#xff0c;63岁的斯蒂芬 诺曼丁&#xff08;Stephen Normandin&#xff09;发现自己居然被莫名其妙解雇了。斯蒂芬是Amazon Flex的一…

微信开放平台手机APP支付

PHP对接APP微信支付 微信开放平台手机APP支付总结 1. 微信开放平台手机APP支付总结 支付功能链接: https://pay.weixin.qq.com/wiki/doc/api/index.html APP支付功能文档: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter8_3 Demo下载地址: https://pay.weixin.q…

VS2005创建CLR自定义触发器

第一步&#xff1a;在Visual Studio 2005中编写代码 using System; using System.Data; using System.Data.Sql; using System.Data.SqlServer; using System.Data.SqlTypes; public partial class Triggers { // Enter existing table or view for the target and unc…

Adobe推出HTML5动画设计工具Edge

2019独角兽企业重金招聘Python工程师标准>>> HTML5和Flash&#xff0c;是敌对&#xff1f;是共存&#xff1f; 尽管Flash现在依然牢牢占据着网络动画的大半江山&#xff0c;但这种状况终将会被改变。 那么&#xff0c;Edge的推出是否意味着Adobe将放弃和屈服于Flash…

AI 算法给手画线稿自动上色指南来了

测试图片作者 | 叶庭云来源 | 修炼Python生成线稿图像手绘效果的特征&#xff1a;黑白灰色、边界线条较重、相同或相近色彩趋于白色、略有光源效果。手绘风格是在对图像进行灰度化的基础上由立体效果和明暗效果叠加而成的&#xff0c;灰度实际代表了图像的明暗变化&#xff0c;…

mysqldump和xtrabackup备份原理实现说明

MySQL数据库备份分为逻辑备份和物理备份两大类&#xff0c;犹豫到底用那种备份方式的时候先了解下它们的差异&#xff1a; 逻辑备份的特点是&#xff1a;直接生成SQL语句&#xff0c;在恢复的时候执行备份的SQL语句实现数据库数据的重现。物理备份的特点是&#xff1a;拷贝相关…

C语言100个经典的算法

POJ上做做ACM的题 语言的学习基础,100个经典的算法C语言的学习要从基础开始&#xff0c;这里是100个经典的算法&#xff0d;&#xff11;C语言的学习要从基础开始&#xff0c;这里是100个经典的算法 题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月…

PornHub:修复百年前情色电影

全球最大不可描述网站 PornHub 最近在自己的官网上&#xff0c;注册了一个名为 「Remastured」的视频发布账号&#xff0c;中文意为「重制」。截止目前&#xff0c;这个账号已经上传了 21 个视频&#xff08;包含一部项目介绍视频&#xff09;&#xff0c;共计两万的订阅用户和…

jquery 插件开发的作用域及基础

2019独角兽企业重金招聘Python工程师标准>>> 之前一直有开发jquery插件的冲动&#xff0c;所以一直想学习如何进行插件开发&#xff0c;最近一个项目需要使用图片上传组件及自动无限下拉组件&#xff0c;百度地图组件&#xff0c;所以趁着这次我就把他们全部插件化了…

WSUS Troubleshooting guide

Troubleshooting guide for issues where WSUS clients are not reporting in 来自于WSUS TEAM BLOG This guide is written to assist specifically in troubleshooting WSUS when clients are not reporting in. We will examine common troubleshooting considerations that…

在PHP语言中使用JSON

从5.2版本开始&#xff0c;PHP原生提供json_encode()和json_decode()函数&#xff0c;前者用于编码&#xff0c;后者用于解码。 一、json_encode() 该函数主要用来将数组和对象&#xff0c;转换为json格式。先看一个数组转换的例子&#xff1a; $arr array (a>1,b>2,c&g…

【动态规划】最长公共子序列与最长公共子串

1. 问题描述 子串应该比较好理解&#xff0c;至于什么是子序列&#xff0c;这里给出一个例子&#xff1a;有两个母串 cnblogsbelong比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致&#xff0c;我们将其称为公共子序列。最长公共子序列&#xff…

限量!“Java成长笔记”Spring Boot/Sentinel/Nacos高并发

前言本文是为了帮大家快速回顾了Java中知识点&#xff0c;这套面试手册涵盖了诸多Java技术栈的面试题和答案&#xff0c;相信可以帮助大家在最短的时间内用作面试复习&#xff0c;能达到事半功倍效果。本来想将文件上传到github上&#xff0c;但由于文件太大有的都无法显示所以…

时区切换导致quartz定时任务没有触发问题

时区切换对Quartz的cron表达式有影响&#xff0c;切换的1小时内停止触发定时任务&#xff0c;导致sla没有定时清空内存计数&#xff0c;误发限流。 美国夏令时PST切换到冬令时PDT&#xff0c;会有时间跳变。不带时区跳变的&#xff0c;会出现时间重叠或不连续 问题复现 mac本机…

C#之消息队列的简要说明

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Messaging ; using System.Threading ; namespace WinMsmq { /// <summary> /// Form1 的摘要说…

Arm收购进展、元宇宙、GPU涨价……听听黄仁勋怎么说

今年的台北国际电脑展 (Computex) 于 6 月 1-5 日在线上召开&#xff0c;期间 NVIDIA CEO 黄仁勋接受了媒体的线上群访&#xff0c;本文对采访内容进行了翻译与整理。对厨房情有独钟的黄教主&#xff0c;走出了厨房&#xff0c;选择了 NVIDIA 新办公大楼 Voyager&#xff08;旅…

要立刷金组flag了T_T

刷了那么多银组&#xff0c;发现自己好多不会啊... 果然太弱 在这感谢hzwer神犇的blog。。 大部分题解都从黄学长这里来orz。 orz。。。。 果然我太水

Centos7更改root密码

方法一#Step1&#xff1a;重启linux命令&#xff1a;rebootinit 6shutdown -r now#Step2&#xff1a;进grub改启动参数启动界面按“e”ro 改为rw init/sysroot/bin/shCtrlX保存做的更改&#xff0c;这时已经进入操作界面了#Step3&#xff1a;CtrlD然后init 6重启电脑&#xff0…

C#实现Des加密和解密

using System; using System.IO; using System.Security.Cryptography; namespace Vavic { /// <summary> /// Security 的摘要说明。 /// </summary> public class Security { const string KEY_64 "VavicApp"; const string IV_64 "V…

10 行代码玩转 NumPy!

作者 | 天元浪子来源 | Python作业辅导员NumPy也可以画图吗&#xff1f;当然&#xff01;NumPy不仅可以画&#xff0c;还可以画得更好、画得更快&#xff01;比如下面这幅画&#xff0c;只需要10行代码就可以画出来。若能整明白这10行代码&#xff0c;就意味着叩开了NumPy的大门…

秘钥加密码的登录模式

应用场景&#xff1a;有时候我们要给远在北京或者国外的开发人员服务器的权限&#xff0c;为了保证服务器的安全性我们不想让他们知道服务器的root登陆密码&#xff0c;所以我们可以给他们用秘钥加密码的登陆模式。原理&#xff1a;公钥加密 私钥解密。公钥和私钥是成对生成的&…

【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法

目录&#xff1a; 【C#小知识】C#中一些易混淆概念总结--------数据类型存储位置&#xff0c;方法调用&#xff0c;out和ref参数的使用 【C#小知识】C#中一些易混淆概念总结&#xff08;二&#xff09;--------构造函数&#xff0c;this关键字&#xff0c;部分类&#xff0c;枚…

关于C语言中的malloc和free函数的用法

一、malloc()和free()的基本概念以及基本用法&#xff1a; 1、函数原型及说明&#xff1a; void *malloc(long NumBytes)&#xff1a;该函数分配了NumBytes个字节&#xff0c;并返回了指向这块内存的指针。如果分配失败&#xff0c;则返回一个空指针&#xff08;NULL&#xff0…

爱购,你的最爱

这是个基于淘宝的购物软件,天天有特价转载于:https://www.cnblogs.com/ios1/p/3969797.html

「深度学习知识体系总结(2021版)」开放下载了!

随着世界技术的迭代与发展&#xff0c;人工智能和机器学习正在超自动化领域&#xff0c;扮演着越来越重要的角色。2020年的冠状病毒疫情突发&#xff0c;整个世界都在防疫的道路上披荆斩棘。人工智能发挥了重大作用&#xff0c;智能测温、智能消毒、智能建设都能看到AI的影子。…

自定义通知与系统通知的学习(详解)

因为有需求要做非系统通知&#xff0c;所以小马找个时间干脆一起学习了系统默认的通知与自定义通知的实现&#xff0c;吼吼&#xff0c;虽然简单&#xff0c;但开心呀&#xff0c;不多讲&#xff0c;老规矩&#xff0c;先看效果再来看代码&#xff1a; 一&#xff1a;应用刚启动…

Quick Cocos2dx 初步战斗

呵呵&#xff0c;图片先来一发&#xff1a; 最近懒&#xff0c;很懒&#xff0c;连我自己都觉得有点可耻了。 但是实在没有什么东西啊&#xff0c;温水煮青蛙的什么的。 吐槽完成&#xff0c;以上。 目前完成了简单的战斗部分&#xff0c;AI还需要抽出来。 然后突然之间想到手游…

C#简介- 类和对象

类&#xff08;class&#xff09;是C#类型中最基础的类型。类是一个数据结构&#xff0c;将状态&#xff08;字段&#xff09;和行为&#xff08;方法和其他函数成员&#xff09;组合在一个单元中。类提供了用于动态创建类实例的定义&#xff0c;也就是对象&#xff08;object&…