win8应用开发-保存和恢复应用程序状态

因为win8应用同一时刻只允许一个应用在前台运行,即当切换到其他应用时当前应用将被挂起且停止运行,此时如果我们正在进行一些状态信息的录入那么我们就应该对这些信息进行临时保存,以便在需要的时候进行恢复。

ok,开始:新建一个空白应用程序,向项目中添加类StateDate,代码如下:

public class StateData:INotifyPropertyChanged
    {
        //保存状态信息的键名
        private const string KEY_TITLE = "title";
        private const string KEY_CONTENT = "content";

        //当前类实例的静态属性
        public static StateData CurrentInstance { get; set; }

        //标题
        private string m_title;

        public string Title
        {
            get
            {
                return this.m_title;
            }
            set
            {
                if(value!=this.m_title)
                {
                    this.m_title = value;
                    onPropertyChanged("Title");
                }
            }
        }

        //内容
        private string m_content;

        public string Content
        {
            get
            {
                return this.m_content;
            }
            set
            {
                if(value!=this.m_content)
                {
                    this.m_content = value;
                    onPropertyChanged("Content");
                }
            }
        }

        //构造函数
        private StateData()
        {
            this.m_title = string.Empty;
            this.m_content = string.Empty;
        }

        //静态构造函数
        static StateData()
        {
            CurrentInstance = new StateData();
        }

        /// <summary>
        /// 加载前先保存状态信息
        /// </summary>
        public static void LoadState()
        {
            ApplicationDataContainer container = ApplicationData.Current.LocalSettings;

            if (container.Values.ContainsKey(KEY_TITLE))
            {
                CurrentInstance.Title = (string)container.Values[KEY_TITLE];
            }
            if(container.Values.ContainsKey(KEY_CONTENT))
            {
                CurrentInstance.Content=(string)container.Values[KEY_CONTENT];
            }
        }

        /// <summary>
        /// 保存状态信息
        /// </summary>
        public static void SaveState()
        {
            ApplicationDataContainer container = ApplicationData.Current.LocalSettings;
            container.Values[KEY_TITLE] = CurrentInstance.Title;
            container.Values[KEY_CONTENT] = CurrentInstance.Content;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void onPropertyChanged(string prop)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
            }
        }
    }

然后打开MainPage.xaml,在页面上添加两个TextBox控件:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel Orientation="Vertical" Margin="25">
            <TextBlock FontSize="24" Text="邮件标题:" Margin="2,2,0,3"/>
            <TextBox x:Name="txtTitle" Margin="3,0,5,3"/>
            <TextBlock FontSize="24" Text="邮件正文:" Margin="2,21,0,3"/>
            <TextBox x:Name="txtContent" Margin="3,0,5,3" Height="200" TextWrapping="Wrap"/>
        </StackPanel>
</Grid>

接着MainPage的后置代码里,在OnNavigatedTo方法里加入如下代码:

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            //Title
            Binding myTitleBinding = new Binding();
            myTitleBinding.Path = new PropertyPath("Title");
            myTitleBinding.Source = StateData.CurrentInstance;
            myTitleBinding.Mode = BindingMode.TwoWay;
            this.txtTitle.SetBinding(TextBox.TextProperty, myTitleBinding);

            //Content
            Binding myContextBinding = new Binding();
            myContextBinding.Path = new PropertyPath("Content");
            myContextBinding.Source = StateData.CurrentInstance;
            myContextBinding.Mode = BindingMode.TwoWay;
            this.txtContent.SetBinding(TextBox.TextProperty, myContextBinding);
        }

打开App.xaml.cs文件,在OnLaunched方法中"TODO"注释后面加上以下代码:

if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
   //TODO:  从之前挂起的应用程序加载状态
   StateData.LoadState();
}

在OnSuspending方法中"TODO"注释后面添加以下代码:

StateData.SaveState();

注:1、有关文中提到的OnLaunched,OnSuspending等方法的用法详见MSDN:https://msdn.microsoft.com/zh-cn/library/windows/apps/windows.ui.xaml.application.onlaunched.aspx,这里不多家啰嗦。

2、LocalSettings:用于获取本地应用程序数据存储区中的应用程序设置容器。

按F5运行将看到这样的界面(我这里选择的是模拟器,看个人喜好)

在调试位置工具栏上选择“挂起并关闭”

然后再次按F5运行你会发现标题和内容依然存在。

时间: 2024-08-26 03:45:22

win8应用开发-保存和恢复应用程序状态的相关文章

ios开发——实用技术篇&amp;数据保存于恢复

数据保存于恢复 用户操作(输入数据)之后,应用程序退出并且终止之后,当用户再次打开应用的时候还是保持原来的状态 一:在storyBoard中设置恢复标志符 二:在AppDalegate中代理方法 1 -(BOOL) application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder 2 { 3 return YES; 4 } 5 6 -(BOOL) application:(UIApplicat

Android开发中Activity状态的保存与恢复

当置于后台的Activity因内存紧张被系统自动回收的时候,再次启动它的话他会重新调用onCretae()从而丢失了之前置于后台前的状态. 这时候就要重写Activity的两个方法来保存和恢复状态,具体用途举个例子:你正在编辑短信,这时候来了一个电话,打完电话回到短信界面, 短信刚好被系统回收重启,这时原先编辑了一半的内容总不能丢失了吧,这样影响用户体验.所以解决办法如下: 1 private static final String INSTANCE_STATUS="instance_statu

【Android】11.2 通过重写对应的方法保存和恢复实例的状态

分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 通过重写(也叫回调)对应的方法来管理Activity的生命周期,比如用户旋转屏幕时应用程序要能自动保存和恢复实例的状态,这对于开发一个健壮而又灵活的应用程序而言至关重要. 1.本节要点 一旦真正理解了Activity的生命周期,就可以轻松自如地通过C#代码去控制它了.这一节我们主要学习如何用Boundle存储简单类型的数据(比如int.double.string.bool.--等). 当一个Activity停止

Android——保存和恢复用户状态

onSaveInstanceState 保存 在暂停之后和保存之前调用 onRestoreInstanceState 恢复 再启动之后和显示之前调用 package com.example.chenshuai.excise; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View;

保存和恢复activity的状态数据[转]

转自:here 一般来说,调用onPause()和onStop()方法后的activity实例仍然存在于内存中,activity中的所有信息和状态数据都不会消失,当activity重新回到前台后,所有的改变都会保留. 但是当内存系统内存不足时,调用onPause()和onStop()方法的activity可能被摧毁.此时内存中就不会存在有该activity实例对象了. 为了避免这种情况,我们可以覆盖onSaveInstanceState()方法来接受一个Bundle类型的参数,我们可以将该act

【转】android笔记--保存和恢复activity的状态数据

一般来说, 调用onPause()和onStop()方法后的activity实例仍然存在于内存中, activity的所有信息和状态数据不会消失, 当activity重新回到前台之后, 所有的改变都会得到保留. 但是当系统内存不足时, 调用onPause()和onStop()方法后的activity可能会被系统摧毁, 此时内存中就不会存有该activity的实例对象了. 如果之后这个activity重新回到前台, 之前所作的改变就会消失. 为了避免此种情况的发生, 开发者可以覆写onSaveIn

Android课程---Activity中保存和恢复用户状态

onSaveInstanceState 保存 在暂停之后和保存之前调用 onRestoreInstanceState 恢复 再启动之后和显示之前调用 package com.example.chenshuai.excise; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View;

Activity保存与恢复状态。。。点击事件的方法。。关闭Activity

Activity的保存与恢复 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.e("TAG", "保存应用状态"); outState.putString("e1", e1.getText().toString()); outState.putString("e2",

Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状态之外, 还需要用户手动保存一些成员变量. Fragment的状态有它自己的实例状态和其中的View状态, 因为其生命周期的灵活性和实际需要的不同, 情况会多一些. 根据源码, 列出了Fragment中实例状态和View状态保存和恢复的几个入口, 便于分析查看. 最后专门讲了WebView状态保存和