windows phone 墓碑化(9)

简介: 原文:windows phone 墓碑化(9)几个术语的理解:  名称 说明 Launched 启动新程序的启动 Closed 通过Back按键关闭程序 Deactivated ...
原文: 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文件中可以找到改变这几个状态时所触发的事件,事件里面有注解就不在详细说明了

img_405b18b4b6584ae338e0f6ecaf736533.gif 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隐藏文件代码:

img_405b18b4b6584ae338e0f6ecaf736533.gif 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; }

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

img_405b18b4b6584ae338e0f6ecaf736533.gif 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,进行激活使用;

 

 

目录
相关文章
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1806 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
|
XML 开发框架 前端开发
Windows Phone快速入门需掌握哪些能力
在此之前,先普及下Windows Phone的概念和开发工具的介绍。 Windows Phone是微软公司开发的手机操作系统,它将微软旗下的Xbox Live游戏、Xbox Music音乐与独特的视频体验集成至手机中。2012年6月21日,微软正式发布Windows Phone 8,采用和Windows 8相同的Windows NT内核,同时也针对市场的Windows Phone 7.5发布Windows Phone 7.8。
308 0
Windows Phone快速入门需掌握哪些能力
|
移动开发 Android开发 开发者
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
在Build 2014大会上,微软正式发布了传闻已久的Windows Phone 8.1系统,所有的Windows Phone 8手机都可以升级,微软这次可谓是十分厚道。虽然并非迭代升级,但WP 8.1还是拥有很多重大更新,对于微软进一步完善移动平台拥有积极的意义。下面,就一起来了解一下WP 8.1的主要新特性。
352 0
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
|
编解码 前端开发 JavaScript
Windows Phone 下开发 LBS 应用
基于位置的服务(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。
352 0