• 博客园客户端(Universal App)开发随笔


    当用户在多个windows设备上使用应用时,我们希望用户的某些设置和数据可以在多个之间共享,比如我们新版本中收藏的文章。通常情况下要实现这种功能,我们可能需要自己弄个服务器或者使用onedrive等网站来存放文件,但是对于我们这种小型的应用有点过了,额外增加了代码和维护的工作。这种时候使用windows roaming就是一个比较方便的选择。

    所谓的漫游数据,MSDN上是这样介绍的:

    Windows 8 可在用户设备之间自动传输某些应用数据。应用开发人员无需再执行费力的工作。漫游应用数据为最终用户提供使用多台设备(例如办公电脑和家用平板电脑)的卓越应用体验

    Windows应用在安装时,系统会为设置和文件等应用数据提供它自己的用户数据存储(因为windows上可能使用不同的账号登陆,所以这个存储需要按用户分开),大概分为4种,具体参见MSDN

    本地当前设备上存在的数据将在云中备份。

    漫游存在于用户安装了该应用的所有设备上的数据。

    临时可由系统在任何时刻删除的数据。

    localcache

    仅存在于当前设备上的持久数据。

    其中漫游(roaming)就是我们需要的,可以漫游的数据分为两种:设置和文件。而我们只需要负责写入内容就可以了,其他的都由系统控制(甚至可以在网络异常之后自动重试,为我们省下很多时间和代码啊)。

    漫游设置:

    设置是Windows提供的key-value存储空间,使用方法和字典差不多,但需要注意的是可存储的类型,只支持大部分运行时(runtime)的类型,自定义的类型就不要想了。

    // 对于不需要同步的设置项,使用LocalSettings
    // ApplicationDataContainer local = Windows.Storage.ApplicationData.Current.LocalSettings;
    
    // 需要同步的使用RoamingSettings,两种setting的使用是一样的
    ApplicationDataContainer roaming = Windows.Storage.ApplicationData.Current.RoamingSettings;
    roaming.Values["key"] = "漫游的设置";
    漫游文件:

    当设置不能满足需求的时候,我们可以将内容写入文件,并存放在漫游文件夹。

    // 漫游文件夹
    var roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder;
    
    // 在漫游文件夹内创建一个文件,
    var file = await roamingFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists);
    
    // 写入内容
    awaitFileIO.WriteTextAsync(file, "需要同步的内容");

    以上就是使用漫游的代码,这样只要用户使用同一个账号登陆设备,并安装了同一个版本的应用(注意:必须是同一版本的),那么这些数据就会被系统同步。

    效果如下:

    windows 端:

    cnblog_roaming_windows

    windows phone 端:

    cnblog_roaming_wp

    漫游虽然很方便,但它的使用是有限制的。

    Windows的应用数据漫游有大小限制(应该是100KB, 虽然MSDN上没有明确给出具体数值,但是这个值应该是和设备无关的,即使不一样我们也应该选择最小的作为基准。。),具体可以通过使用Windows.Storage.ApplicationData.Current.RoamingStorageQuota来获得,单位是KB。

    cnblog_size

    使用模拟器测试的同学需要注意了,在模拟器上这个值返回的是0。。。

    如果超过了这个限制,数据就不会被漫游了。因为这个限制,我们需要谨慎的选择存储的内容(希望以后可以提高这个限制,有点不够用啊。。),尽量选择必要的应用设置和小文件。

    因为漫游的本身就不是为了及时同步设计的,所以会造成应用的数据不一致的情况,就是说你在手机上保存了一个文件,不一定被立刻同步到其他设备上,这个时间是由系统决定(也和网络有关),所以对时间有要求的同学可以绕路了。。对于这点MSDN上有详细的说明:

    Windows 会随机漫游应用数据,不会保证即时同步。如果用户脱机或位于高延迟网络中,则漫游可能会明显延迟。请勿构建需要即时同步的 UI。 如果你的应用频繁更改信息(例如,歌曲或电影中的最新位置),则请勿对此数据使用漫游应用数据功能。而选取较不频繁但仍可提供良好用户体验的表示 – 例如,当前播放的歌曲、当前播放的电影章节等。

    我们的已经发布的应用和代码可以在下面找到:

    Windows Phone Store App link:

    http://www.windowsphone.com/zh-cn/store/app/博客园-uap/500f08f0-5be8-4723-aff9-a397beee52fc

    Windows Store App link:

    http://apps.microsoft.com/windows/zh-cn/app/c76b99a0-9abd-4a4e-86f0-b29bfcc51059

    GitHub open source link:

    https://github.com/MS-UAP/cnblogs-UAP

    MSDN Sample Code:

    https://code.msdn.microsoft.com/CNBlogs-Client-Universal-477943ab

  • 相关阅读:
    redis的常用命令及php-redis的使用
    mysql数据库基本操作
    php接口数据安全解决方案
    如何防止api接口被恶意调用或攻击
    virtualBox安装及调试
    PHP常用扩展
    memcached安装与应用
    Jmeter的基础使用(4)——添加服务器的监控
    Jmeter的基础使用(3)——使用实操
    Jmeter的基础使用(2)——线程的添加以及基本使用
  • 原文地址:https://www.cnblogs.com/ms-uap/p/4184328.html
Copyright © 2020-2023  润新知