zoukankan      html  css  js  c++  java
  • windows phone 墓碑化(9)

    几个术语的理解:

    名称

    说明

    Launched

    启动新程序的启动

    Closed

    通过Back按键关闭程序

    Deactivated

    一个正在程序运行,此时按start键,程序停用,此后进入墓碑化

    Activated

    程序从墓碑化复活,即激活

    那么我们程序的生命周期也就大致显示出来了:

     

    生命周期的描述:当我们在start页面运行一个程序A时,此时程序A进入启动(Launched)阶段,启动完成之后,程序一般会相当长的时间处于running状态,如果此时你按Back键,则直接进入Closed状态,还有就是在运行过程中有突发事件,比如来电话,来信息,或者你需要运行程序B,你就按Start键,在按Start键的时候处于Deactivated状态,然后在运行程序B的过程中,程序A一直处于Tombstoning墓碑化状态(除非你从Start页重新启用程序A的新实例),在操作程序B的过程中你如果长按Back键,系统会调出卡片式任务管理器,里面就会包含程序A,程序B,Start页面,如果点击程序A,此时程序A就会被激活,进入运行状态,之至改程序被关闭,程序A的生命周期就完成了;

     在App.xaml.cs文件中可以找到改变这几个状态时所触发的事件,事件里面有注解就不在详细说明了

    View Code
    // 应用程序启动(例如,从“开始”菜单启动)时执行的代码
            
    // 此代码在重新激活应用程序时不执行
            private void Application_Launching(object sender, LaunchingEventArgs e)
            {
                //可以从独立存储空间读取资料进行初始化
            }

            // 激活应用程序(置于前台)时执行的代码
            
    // 此代码在首次启动应用程序时不执行
            private void Application_Activated(object sender, ActivatedEventArgs e)
            {
                //可以恢复临时数据
               
               
            }

            // 停用应用程序(发送到后台)时执行的代码
            
    // 此代码在应用程序关闭时不执行
            private void Application_Deactivated(object sender, DeactivatedEventArgs e)
            {
                //存储临时数据,以便用户从墓碑化状态激活
                
            }

            // 应用程序关闭(例如,用户点击“后退”)时执行的代码
            
    // 此代码在停用应用程序时不执行
            private void Application_Closing(object sender, ClosingEventArgs e)
            {
                //程序按Back键时,可以存储到独立存储空间
            }

    效果:

     

    那么下面的案例就是在用户关闭程序后,在从任务管理器中重新激活或者通过Back键返回到程序,进行数据的暂存;其实就是让用户感觉不到程序已经关闭了,当用户程序回到程序时,和用户离开时呈现出来的相一致;

     由于MainPage.xaml页面没有任何修改,所以没有贴出,MainPage隐藏文件代码:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using Microsoft.Phone.Controls;
    //
    using Microsoft.Phone.Shell;

    namespace Tombstoned
    {
        public partial class MainPage : PhoneApplicationPage
        {
            int sum = 0;
            App ap = (App)Application.Current;
            // 构造函数
            public MainPage()
            {
                InitializeComponent();
            }
            //经验证此方法只有在程序启动的时候才加载
            private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
            {
                //this.ApplicationTitle.Text = ap.appKey;
            }
            protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
            {
                sum++;
                //程序标题处显示
                this.PageTitle.Text = sum.ToString();
                ap.appKey = this.PageTitle.Text;
                base.OnManipulationStarted(e);
            }

            protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
            {
                if (!string.IsNullOrEmpty(ap.appKey))
                {
                    this.PageTitle.Text = ap.appKey;
                }
             
                base.OnNavigatedTo(e);
            }
           
        }
    }

     从上面代码中可以看出我们是把数据保存到App类中的一个公共属性中了,我们在触摸事件中把自加的数值赋值于App公共属性appKey,在MainPage页面加载后调用OnNavigatedTo方法进行初始化,可以看出我们把临时数据保存在App类中了,那么App类中是怎么实现的那;App类隐藏文件中添加的代码如下:

     public string appKey { getset; }

     即保存数据的公共属性,其中我们用到的两个方法,并把他们实现:

    View Code
      // 激活应用程序(置于前台)时执行的代码
            
    // 此代码在首次启动应用程序时不执行
            private void Application_Activated(object sender, ActivatedEventArgs e)
            {
                //可以恢复临时数据
                object str=string.Empty;

                if (PhoneApplicationService.Current.State.TryGetValue("key"out str))
                {
                    appKey=str.ToString();
                }
               
            }

            // 停用应用程序(发送到后台)时执行的代码
            
    // 此代码在应用程序关闭时不执行
            private void Application_Deactivated(object sender, DeactivatedEventArgs e)
            {
                //存储临时数据,以便用户从墓碑化状态激活
                PhoneApplicationService.Current.State["key"] = appKey;
            }

     可以看到我们是在用户遇到突发事件(如电话)时用PhoneApplicationService.Current.State进行存储的,并在用户通过任务管理器或者Back键时激活改程序,并用

    PhoneApplicationService.Current.State.TryGetValue方法获取值,该方法的好处是不会报出异常信息;任务管理器的的效果图:

     

     windows phone 7 对多个应用程序的管理:windows phone 7 是通过栈对多个程序进行管理的,当我们运行程序A的时候,如果我们需要运行程序B,那么我们会按Start键,Start键就会把程序A压入栈中(此时程序A是停止运行的),如果需要运行程序C,同样程序B也会被压入栈中,那么按Back键就会把当前程序C终止,并从栈中获得最后一个压入程序B,进行激活使用;

    作者:神舟龙
        
     

    新建的wp開發者群:42182428 

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    SP笔记:交叉实现七行并成一行
    HTML tag 学习
    操作哈希表
    Efficient bipedal robots based on passivedynamic walkers
    Pushing People Around
    ZEROMOMENT PONTTHIRTY FIVE YEARS OF ITS LIFE

    Active Learning for RealTime Motion Controllers
    Accelerometerbased User Interfaces for the Control of a Physically Simulated Character
    Dynamic Response for Motion Capture Animation
  • 原文地址:https://www.cnblogs.com/shenzhoulong/p/2447817.html
Copyright © 2011-2022 走看看