浅谈Isolated storage的应用 – [WP开发]

浅谈Isolated storage的应用 – [WP开发]

当一个WP应用程序安装好后,它会产生与访问多种类型的数据,包括一些即时数据(例如运行时的某些变量等),也会有一些长久保留持有的数据(例如程序的设置信息等)。在WP编程中,保存与访问即时数据有多种方式,例如可以通过PhoneApplicationService类的State属性来存储一些临时数据,由于WP编程中的墓碑机制,这些数据会保留直到用户主动删除或者当这个WP程序退出终止时。而为了保存持久性数据,在WP中我们可以通过使用isolated storage存储方式保存在本地磁盘上。

一、isolated storage 小览

在使用isolated storage前,我们需要引用System.IO.IsolatedStorage命名空间,专属某个程序的isolated storage区域内的所有文件该程序都可以访问与修改。如果我们只是想保留WP程序的一些配置信息的话,WP提供IsolatedStorageSettings这个类更为方便我们的操作。(ps.说到WP程序的配置信息,一种合理的设计方式应该是从整个应用程序的角度去看而不是单为某个页面保存设计信息。) 所以从全局的角度出发,与配置信息相关的操作应该与App这个类相关联。

 

二、IsolatedStorageSettings应用小例子

下面用一个小例子说明如何操作isolated storage。设计一个WP程序,其中有一个numTaps的变量存储即时数据,记录点击屏幕的次数,然后还有一个BackgroundBrush的变量作为配置信息存储该程序的背景颜色,也就是说该程序重新打开后的背景颜色不是初始化时的黑色,而是在加载时就载入了配置信息设置其背景颜色为保存时的颜色。

新建Windows Phone项目WPIsolatedStorage,然后在App类中定义一个公共变量BackgroundBrush,作为程序的配置信息。这时要思考什么时候应该保存这些配置信息,读取这些配置信息,WP程序部署后有5种状态:Launching、Running、Deactivated、Activated以及Closing。符合常理的情况应该是在Launching及Activated时加载入配置信息,而在Deactivated及Closing时保存配置信息。看到App.xaml.cs文件,该文件已经包含有PhoneApplicationService事件中的响应方法,我们只需要在这些方法体内实现逻辑功能保存及加载配置信息即可。

       private void Application_Launching(object sender, LaunchingEventArgs e)
        {
            LoadSettings();
        }
        private void Application_Activated(object sender, ActivatedEventArgs e)
        {
            LoadSettings();
        }
        private void Application_Deactivated(object sender, DeactivatedEventArgs e)
        {
            SaveSettings();
        }
        private void Application_Closing(object sender, ClosingEventArgs e)
        {
            SaveSettings();
        }

 

而LoadSettings()与SaveSetting()实现如下:

//Load setting and Save setting
        void LoadSettings()
        {
            IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
            Color clr;
            if (settings.TryGetValue<Color>("backgroundColor", out clr))
                BackgroundBrush = new SolidColorBrush(clr);
        }

        void SaveSettings()
        {
            IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
            if (BackgroundBrush is SolidColorBrush)
            {
                settings["backgroundColor"] = (BackgroundBrush as SolidColorBrush).Color;
                settings.Save();
            }
        }

三、IsolatedStorageFile 应用小例子

从上面的代码中可以看出,IsolatedStorageSettings存储的是”键-值”对应关系型数据。其实WP的IsolatedStorage是一种类似Cookie的静态存储机制,可以将一些基本类型(String,Int)的信息甚至是自定义类型序列化后的静态存储于客户端文件中。独立存储[IsolatedStorage]是一个局部信任机制,当你创建一个WP应用程序时会在硬盘上创建相应独立的存储区域.这里面独立是相对于不同Windows Phone Project而言的. 当然如果应用程序中存在多个程序集[Project],那么存储空间在这多个程序集之间是共享的。第二部分的那个例子只是简单的介绍了IsolatedStorageSettings的应用,而在isolated storage中,IsolatedStorageFile也是有着很大的用处,用户可以通过它在独立存储中建立文件夹,建立文件,操作文件等。下面用一个例子来说明IsolatedStorageFile的用法。

浅谈Isolated storage的应用 - [WP开发]

先通过该程序在独立存储区域建立一个新文件夹及一个文本文件,并写入任意内容。然后退出该程序,重新进入这个程序,通过“读取内容”的按钮来获取独立存储区域内的文件内容。关键部分代码如下:

        IsolatedStorageFile storge;

        public MainPage()
        {
            InitializeComponent();
            storge = IsolatedStorageFile.GetUserStoreForApplication();
        }
        //在独立存储区域新建文件夹
        private void NewFolder_Click(object sender, RoutedEventArgs e)
        {
            storge.CreateDirectory("myFolder");
        }
        //在独立存储区域新建文件,并写入内容
        private void AddText_Click(object sender, RoutedEventArgs e)
        {
            StreamWriter writer = new StreamWriter(new IsolatedStorageFileStream("myFolder\\file.txt",FileMode.OpenOrCreate,storge));
            //writer content
            writer.WriteLine("hello, windows phone");
            writer.Close();
        }
        //读取文件
        private void ReadText_Click(object sender, RoutedEventArgs e)
        {
            StreamReader reader = new StreamReader(new IsolatedStorageFileStream("myFolder\\file.txt", FileMode.Open, storge));
            string text = reader.ReadLine();
            txtblk.Text = text;
        }

下载代码


四、关于IsolatedStorage的七个Best Practice:

1、Wrap all calls to isolated storage within try/catch blocks to be resilient to potential IsolatedStorageExceptions, which can be thrown if isolated storage is disabled or if the store has been deleted.

把所有对Isolated Storage的调用都包裹在Try/Catch块中来捕获潜在的IsolatedStorageExceptions。因为导致异常的因素实在很多(禁用独立存储、独立存储空间不足、多个应用程序同时操作一份独立存储导致的不一致性,还有在某些情况下操作独立存储,可能会提示独立存储不可用)。

2、If your Silverlight application needs to store a lot of data in isolated storage, consider hosting it on its own site so that it won’t affect other applications on the site and other applications won’t affect it.

如果你的Silverlight应用程序需要独立存储很多的数据,最好把它放在一个单独的网站,这样就不会影响到其他的应用程序。因为所有放在同一网站下的Silverlight应用程序,使用的是同一定额,它们会互相挤占。

3、If you have a group of Silverlight applications that need to share data on the client, host them on the same site.

如果几个Silverlight应用程序需要在客户共享数据,把它们放在同一网站下。

4、Keep isolated storage paths as small as possible to prevent the internal full path from reaching the 260-character limit.

让独立存储的路径越小越好,避免路径长度达到260个字符的限制。

5、Encrypt sensitive data stored in isolated storage.

加密保存在Isolated Storage里的敏感数据,因为它们实际是文本文件,直接可读的。

6、Use IsolatedStorageSettings to store objects and simple settings in isolated storage.

使用IsolatedStorageSettings来储存对象和简单的设置。

7、Use IsolatedStorageFile if you want to use file and stream-based APIs, are storing large amounts of data, or need fine-grained control over the contents of isolated storage.

如果需要使用文件或者基于流的API,保存大数据,或者需要细粒度的控制独立存储中的内容,则使用IsolatedStorageFile。

 

出处-注意到这里的7个编程实践是针对Silverlight的,WP开发的时候要有所思考与灵活使用。

转载于:https://www.cnblogs.com/wpdev/archive/2011/09/15/2177012.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110554.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • canbus速率_erie canal

    canbus速率_erie canalDatabus和canal都能够提供实时从数据库获取变更,并提供给下游的实时消费流的功能。本文针对两个系统实现和应用上的不同点,做了一个简单的对比:对比项Databuscanal结论支持的

    2022年8月5日
    3
  • mongoVue激活成功教程版「建议收藏」

    mongoVue激活成功教程版「建议收藏」下载地址:https://pan.baidu.com/s/1mhPejwO#list/path=%2Fwindows%20soft

    2022年8月21日
    3
  • Kali安装教程(VMWare)「建议收藏」

    Kali安装教程(VMWare)「建议收藏」1.下载镜像及相关1.1下载镜像文件下载链接:https://www.kali.org/downloads/选择自己需要的版本下载,根据经验先下载种子文件(torrent)再用迅雷下载网速是最有

    2022年8月5日
    3
  • Java IO层次体系结构[通俗易懂]

    Java IO层次体系结构[通俗易懂]在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了   JavaI/O主要包括如下几个层次,包含三个部分:   1.流式部分――IO的主体部分;  2.非流式…

    2022年6月5日
    61
  • 在线数据库设计工具-toolfk程序员在线工具网

    在线数据库设计工具-toolfk程序员在线工具网本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果。ToolFk还支持BarCode条形码在线生成、QueryList采集器、PHP代码在线运行、PHP混淆、加密、解密、Python代码在线运行、JavaScript在线运行、YAML格式化…

    2022年7月11日
    83
  • 流水线设计的方法和作用「建议收藏」

    流水线设计的方法和作用「建议收藏」流水线设计从某种程度上可以提高系统频率,因此常用于高速信号处理领域,如果某个信号可以分为若干步骤处理,而且整个数据处理过程是单项的,即没有反馈运算和迭代运算,前一个步骤的输出就是下一个步骤的输入,可以考虑流水线设计来提高系统的频率。如下图所示:典型的流水线设计是将原本一个时钟周期完成的较大的组合逻辑通过合理的切割后分由多个时钟周期来完成,这样一来该部分逻辑运行的时钟频率就会有明显的提升,尤其当她是…

    2022年4月19日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号