Windows phone开发初体验之-基本概念的了解
 

(一)             Windows phone执行模型:

主旨:始终为最终用户提供快速响应的体验
特点:在任何给定时间内,Windows Phone 仅允许一个应用程序在前台运行。当应用程序不再运行于前台时,操作系统将使应用程序进入休眠状态
处理的原则:如果可用于前台应用程序的设备内存不足,无法提供出色的用户体验,则操作系统将开始终止休眠的应用程序(首先终止最早使用的应用程序)
 

(二)             基本概念:

应用程序状态:由应用程序中的多个页面使用的数据
页面状态:单个应用程序页面的当前可视状态
应用程序事件:【可以理解为Android应用程序中的生命周期函数】。在这里有四个,分别是:LaunchingDeactivatedActivated 和 Closing。这些事件的处理是包含在Application对象中的【该对象是 Windows Phone 应用程序的 Visual Studio 项目模板的一部分。您将在这些事件处理程序中编写代码来管理应用程序状态】。 
特别注意的是:所有应用程序事件都限定应用程序在 10 秒钟的时间内完成事件处理程序中的任务。如果某个应用程序超出此限制,则会立即将其终止。因此,您应当避免执行资源密集型任务,如在应用程序事件的处理程序内从独立存储中读取数据和向其中写入数据。在应用程序运行时,这些任务应尽可能通过后台线程来执行。在应用程序的整个生存期内随着应用程序数据的更改而保存应用程序数据,可以减少应用程序事件期间需要执行的状态管理工作量。
页面事件:所有 Windows Phone 页面均继承自 PhoneApplicationPage 对象,它公开了两个方法:OnNavigatedTo(NavigationEventArgs) 和 OnNavigatedFrom(NavigationEventArgs),应用程序将重写这两个方法以管理页面状态。确切的讲,这两个方法是在Page对象中的,而PhoneApplicationPage则是又继承了Page类。通过提供的API我们可以知道这两个方法是定位在Page类的。
逻辑删除:在此过程中,应用程序将终止,但有关应用程序状态和应用程序中各个页面的数据将保留下来。保存的数据包含当前显示的应用程序页面和应用程序中之前访问的页面的后退堆栈。如果用户向后导航至逻辑删除的应用程序,则会重新创建应用程序,并自动还原当前页面和页面历史记录。在这里我们就可以用到了上面的两个页面事件的函数。这样的一个功能我将在后面为大家演示一个Demo。
 

(三)             Windows Phone 应用程序的生命周期

用图说明真相是永远是最好的方法:

Windows phone开发初体验之-基本概念的了解

 
再给出一个Demo吧
我们选择工程目录下的App.xaml 可以看到以下的代码:
 <Application.ApplicationLifetimeObjects>
        <!--处理应用程序的生存期事件所需的对象-->
        <shell:PhoneApplicationService

            Launching="Application_Launching" Closing="Application_Closing"

            Activated="Application_Activated" Deactivated="Application_Deactivated"/>
    </Application.ApplicationLifetimeObjects>
 
再打开“属性对话框”

Windows phone开发初体验之-基本概念的了解

这里就有着四个生命周期的四个事件。或者我们也可以直接打开App.xaml.cs文件也可以看到这已经写好的四个生命周期的四个事件函数
 

Windows phone开发初体验之-基本概念的了解

给出示例的源代码:
        // 应用程序启动(例如,从“开始”菜单启动)时执行的代码
        // 此代码在重新**应用程序时不执行

        private void Application_Launching(object sender, LaunchingEventArgs e)

        {
 
            Debug.WriteLine("---------------------Launching-----------------------------");
          
        }
 
        // **应用程序(置于前台)时执行的代码
        // 此代码在首次启动应用程序时不执行

        private void Application_Activated(object sender, ActivatedEventArgs e)

        {
            Debug.WriteLine("---------------------Activated-----------------------------");
   
        }
 
        // 停用应用程序(发送到后台)时执行的代码
        // 此代码在应用程序关闭时不执行

        private void Application_Deactivated(object sender, DeactivatedEventArgs e)

        {
            Debug.WriteLine("---------------------Deactivated-----------------------------");
   
        }
 
        // 应用程序关闭(例如,用户点击“后退”)时执行的代码
        // 此代码在停用应用程序时不执行

        private void Application_Closing(object sender, ClosingEventArgs e)

        {
            Debug.WriteLine("---------------------Closing-----------------------------");
       
          
        }
 
1、当我们应用程序启动时我们可以看到的输出信息为下面:

Windows phone开发初体验之-基本概念的了解

2、我们点击“SearchTask”将启动一个新的Task这时候我们的应用程序将会被挂起,这就是我们说的墓碑机制也可以说是雪藏。它的状态是:Deactivated
此时我们看到的输出信息为:

Windows phone开发初体验之-基本概念的了解

 
3、当我们点击返回后,我们的应用程序将又变为:Activated
此时我们看到的输出信息为:

Windows phone开发初体验之-基本概念的了解

4、当我们再点出“返回”的时候这就意味着我们退出了这个应用程序,此时我们的应用程序状态就是Closing。此时我们看到的输出信息为:

Windows phone开发初体验之-基本概念的了解

 
相信通过上面的一些介绍。大家对这些概念也有所了解了吧
 

(四)             执行模型事件和应用程序操作摘要

再给出微软官方的建议:
事件或方法
应用程序操作
Launching 事件
执行非常少量的代码。不要执行资源密集型操作,例如,访问独立存储。
OnNavigatedFrom 方法
如果不是向后导航,则将 UI 状态保存到 State 字典。
Deactivated 事件
当应用程序被逻辑删除时,将应用程序状态保存到 State。同时,在应用程序终止时,将持续状态保存到独立存储。当应用程序进入休眠状态时,不要销毁内存中应用程序的状态。
Activated 事件
检查 IsApplicationInstancePreserved。若为 true,则不执行任何操作。若为 false,则使用 State 中的数据还原应用程序状态。
OnNavigatedTo 方法
检查页面是否为新实例。若不是,则状态自动保持。否则,如果 State 中存在数据,则使用该数据还原 UI。
Closing 事件
将持续应用程序数据保存到独立存储。
 
 
注:本上面所描述的一些基本概念大部分也是摘自微软官方文档。