Windows Phone Mango开发实践——应用程序生命周期

 

Windows Phone Mango开发实践

Windows Phone Mango Development Practice

 

正如孙子兵法中所讲:"故不尽知用兵之害者,则不能尽知用兵之利也。"同样的道理,虽然逻辑删除对于移动终端的设备性能可以得到提升,但是对于开发者而言,必须了解逻辑删除的负面作用,就是需要开发者手工编写代码存储应用程序的状态信息,而且要了解临时数据保存和永久数据保存的区别和方法。这样才能开发出用户粘度强的应用程序。

10秒钟原则正是软件开发中针对"用兵之害"所应采取的规避。故曰:知彼知己者,百战不殆;不知彼而知己,一胜一负;不知彼不知己,每战必殆。

代码之美的实践就是不断设计更优的算法,不断提升代码质量,不断创造改变世界的软件。 

应用程序生命周期

概述

Windows Phone执行模型的设计初衷是提供一个快速反应的用户体验,为此,Windows Phone仅仅允许在前台运行一个应用程序,即与用户进行交互的可见的当前运行的应用程序。如果应用程序不在前台运行,那么操作系统将其休眠。如果操作系统为前台应用程序提供系统资源不足,那么操作系统将终止被休眠的应用,终止的顺序按照休眠的先后顺序。 因此,应用程序必须在停用(deactivated)和激活(reactivated)时管理应用程序的运行状态,这有助于为用户提供良好的使用体验。

执行模型还设计了应用程序之间的导航体验。在Windows Phone,用户可以从软件安装列表中启动应用程序,也可以在启动屏幕(Start)通过Tile启动应用程序,比如手指触控Toast通知则启动与此关联的应用程序。在应用程序中提供的后退按钮可以返回前一页面,也可以通过硬件的后退按键(Back)实现向后导航。Windows Phone Mango还提供按住硬件的后退按键(Back)实现应用程序快速切换。

众所周知,Windows Phone的开发可以采用Silverlight和XNA框架,或者Silverlight和XNA混合模式。在开发XNA游戏时,操作系统对应用程序的中断有特殊的处理。具体的内容我们在本章的XNA Game Studio逻辑删除中讲解。

 

应用程序生命周期模型

本节讨论Windows Phone应用程序生命周期的所有元素,并重点讲述在生命周期的每一过程应采取的行动。本节提供有关操作系统和用户触发应用程序状态变化的背景,以及应用程序应执行的事件处理方法。

 

图1-1 应用程序生命周期

 

启动事件

启动事件是应用程序从安装列表或者从启动屏幕(Start)的Tile启动,比如手指触控与应用程序相关联的toast通知而创建新的实例时运行的事件。当执行启动事件,应用程序将创建新的实例,而不是延续以前的实例。为了确保应用程序快速加载,在此事件的处理函数中应尽可能减少代码和处理逻辑,尤其是文件和网络操作等的资源操作密集型任务。为了应用程序获得最佳的用户体验,应在后台线程上执行这些任务。

 

运行

应用程序启动后进入运行状态,直到应用程序终止在前台的运行的激活状态。当手机自动锁屏时,应用程序也会离开运行状态,除非在应用程序设置应用程序空闲监测无效禁止自动锁屏。

 

OnNavigatedFrom方法

当离开应用程序时OnNavigatedFrom (NavigationEventArgs)方法将被调用。当应用程序停用(deactivated)时也会调用OnNavigatedFrom (NavigationEventArgs)方法保存页面状态,以便在返回该页面时恢复原先的状态。唯一的例外是向后导航,NavigationMode属性可以判断出是否是向后导航,如果是则没有必要保存状态,因为下次访问时页面会被重建。

 

停用事件

当用户向前导航离开应用程序或者按下"启动"的物理键启动另一个应用程序时,停用(Deactivated)事件将被调用。当应用程序启动选择器任务时或者手机自动锁屏,停用(Deactivated)事件也会被调用。如果禁止应用程序的空闲监测,那么手机自动锁屏将不会执行。

在处理停用事件时,应用程序应保存所有的运行状态数据,以便随后的恢复时使用。Windows Phone应用程序提供State对象,在状态字典里保存应用程序的状态。当应用程序逻辑删除后被重新激活时,状态字典中的数据将被赋值。因为状态字典里的数据是保存在内存中,所以保存的状态不应包含资源密集的文件操作。

有可能应用程序在停用后被彻底终止,如果应用程序终止,状态字典将不会被保留。鉴于此,应在停用事件中将所有的状态数据保存到独立存储空间。

 

休眠

当应用程序向前导航离开应用程序,在停用事件被调用后,应用程序将进入休眠状态。在这种状态下,应用程序的所有线程被停止,但是应用程序仍然完整的保留在内存中。如果应用程序被重新激活, 应用程序不需要重新创建任何状态,因为所有的状态一直保留在内存中。

如果新的应用程序启动后需要更多的内存资源,以保证良好的用户体验,操作系统将逻辑删除休眠的应用程序释放内存。

 

逻辑删除

逻辑删除的应用程序被终止,但是有关导航状态和状态字典在停用事件的处理过程中可以被保留。智能设备同时管理5个最新的逻辑删除信息。如果用户导航进入逻辑删除的应用程序,应用程序将重新启动并且使用保存的数据和状态信息。除非应用程序被简单终止没有任何数据被保存下来。

 

激活事件

当应用程序从休眠或者逻辑删除状态返回时,将调用激活事件(Activated Event)。操作系统检查应用程序的IsApplicationInstancePreserved属性,以确定应用程序从休眠状态还是从逻辑删除状态返回。如果IsApplicationInstancePreservedtrue表示应用程序处于休眠状态,操作系统从内存中恢复应用程序的状态。如果IsApplicationInstancePreserved为false表示应用程序处于逻辑删除状态,应用程序将使用状态字典恢复逻辑删除前的状态。请注意不要在激活事件中执行资源密集型的任务,比如从独立存储空间或者网络加载资源,这些无疑都增加了应用程序重新恢复所消耗的时间;最佳的做法是在应用程序启动后在后台线程上执行这类操作。

 

OnNavigatedTo方法

当用户导航到页面时调用页面的OnNavigatedTo(NavigationEventArgs)方法,包括应用程序第一次启动,或者应用程序从休眠、逻辑删除状态被重新加载。在此方法中,应检查页面是否是新的实例,如果不是则需重新加载状态数据。如果是新的实例,则从页面的状态字典中读取数据,恢复页面的UI状态。

 

关闭事件

当用户向后导航直至离开应用程序的第一个页面时,关闭事件(Closing Event)将被调用,随后应用程序将被终止。在关闭事件的处理函数中,应保存应用程序中实例的数据。在保存所有应用程序数据和页面导航事件时,有一个10秒钟限制。如果保存时间超出10秒,应用程序将被强制终止。为此,软件设计时应考虑在整个生命周期中随时保存重要的数据,避免在关闭事件中处理大量的文件I/O操作。

 

Windows Phone OS 7.0应用程序的生命周期

下面的关系图说明了Windows Phone OS 7.0应用程序的生命周期。

图1-2 Windows Phone OS 7.0 应用程序生命周期

posted @ 2011-10-04 13:53  Xuesong  阅读(2432)  评论(0编辑  收藏  举报