浅谈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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 首次使用空气炸锅需要干烧10分钟_pycharm第一次打开

    首次使用空气炸锅需要干烧10分钟_pycharm第一次打开1、PyCharm的下载下载地址:https://www.jetbrains.com/pycharm/版本:PyCharmProfessionalEdition收费版本:PyCharmCommunityEdition免费2、首次新建项目打开安装好的PyCharm首次打开会出现本界面,点击CreateNewProject项目命名及选择Python解释…

    2022年8月27日
    5
  • 数电设计–交通灯控制系统「建议收藏」

    数电设计–交通灯控制系统「建议收藏」一、课程设计的内容题目:交通灯控制系统交通灯控制系统时典型的数字电路系统,通过该系统的设计、仿真、制板、答辩和报告等环节,同学可得到数字电路及系统的综合训练。本课程要求设计一个十字路口的交通灯控制器,控制A、B两条交叉道路上的车辆通行。具体要求如下:(1)在十字路口,主、支干道分别设置一组信号灯,每组信号灯由红、黄、绿等表示允许通行,红灯表示禁止通行,黄灯表示该车道上已过停车线的车辆继续通信,未过停车线的车辆停止通行。(2)主、支干道交替通行,主干道每次放行30s,支干道每次放行20s。(3)每

    2022年9月24日
    2
  • mysql5.6 varchar长度不同的情况下group by的效率

    mysql5.6 varchar长度不同的情况下group by的效率

    2021年11月9日
    51
  • (翻译)什么是Java的永久代(PermGen)内存泄漏

    (翻译)什么是Java的永久代(PermGen)内存泄漏转自:http://www.codelast.com/本文是我对这篇文章的翻译:WhatisaPermGenleak? 为了便于阅读,我将原文附于此处,翻译穿插在其中。此外,为了防止原链接在未来某一天失效后,文中的图片再也看不到的问题,我将原文中的图片也保存到了本站的服务器上,我不知道原作者是否允许这样做,但我翻译本文仅在于传播知识的目的,在此向原作者表示深深的感谢:感谢你

    2022年6月29日
    35
  • SHFileOperation使用

    SHFileOperation使用总结一下SHFileOperation的用法,希望对大家有用//删除文件或者文件夹boolDeleteFile(char*lpszPath){SHFILEOPSTRUCTFileOp={0};FileOp.fFlags=FOF_ALLOWUNDO|//允许放回回收站FOF_NOCONFIRMATION;//不出现确认对话框…

    2022年7月18日
    14
  • 苹果电脑录屏软件推荐_苹果手机录屏怎么设置

    苹果电脑录屏软件推荐_苹果手机录屏怎么设置屏幕的录制需要更专业的软件,我们需要的屏幕录制工具,不仅具有录屏的功能,还可以根据自己的需要进行编辑,那么在Mac上有哪些优秀的录屏应用呢?来看一下吧。ApeaksoftScreenRecorderApeaksoftScreenRecorder是一个专业的工具,用于在Windows或Mac电脑上录制任何视频/音频和捕捉屏幕。这款出色的视频屏幕录制软件可以帮助您轻松地在电脑上获得在线电影和广播,记录游戏,制作视频教程,捕捉摄像头视频,截图等。此外,您还可以使用文本框,箭头,突出显示等功能来注释

    2022年9月25日
    3

发表回复

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

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