在介绍生命周期前,我们先了解两个相关的概念。
1、墓碑机制:WP8与Android采用的真后台机制不同,WP8采用的是墓碑机制。一旦从当前应用程序离开(非退出),该应用会被墓碑化,这样可以更好的管理(节省)内存,当然在节省的同时,失去一些便捷性:应用程序无法一直在后台运行。
在墓碑化的过程中,系统保留了应用程序的状态以及程序中访问过的各个页面的状态,此外还保存了页面回退栈。当用户返回一个被墓碑化的app时,这个app会重建,自动返回离开时的页面,之前的页面状态仍然被保留。
2、休眠机制(Dormant):休眠状态是指App被deactivated,但未进入墓碑化的过渡状态。处于这个状态的app若被返回(activated),可以不做任何处理就恢复页面状态信息。这是微软相对7.0增加的内容,为了增强用户体验而设计。我们刚刚离开App又立马返回时可以很清楚的感觉到不用像7.0时代那样等待了。(当然这要看开发者是否做了相应的代码。就目前来说,“爱贴吧”可以秒回,“微博”要稍微等一会,“微信”要等蛮久....这里不得不吐槽下大腾讯对WP的消极作风)
接下来,我们就来说说WP8应用的生命周期了。
如图1.1所示,WP8应用程序的生命周期可以通过4个事件来进行描述。
(图1.1 应用程序生命周期模型 图源来自Nokia NEIC WP8培训)
一、Launching 事件。 当用户从应用程序列表或者开始菜单进入App的时候触发此事件。该事件的触发意味着一个新的应用程序实例被创建。在应用程序的生命周期里此事件只会被执行一次。一般在其响应函数里读取存储的一些配置信息而不要放置耗时较大的操作(如Web服务)。
二、Activated 事件。当用户导航返回到应用程序时,该事件被触发。第一次进入应用时并不会触发该事件。在其响应函数中,我们可以放置一些恢复状态的代码。
三、Deactivated 事件。当应用程序从前台转入后台(非关闭),就会触发此事件。锁屏、启动一个启动器或选择器,按开始按钮键都会触发此事件。这时可以在代码里保存相关数据。
四、Closing 事件。当应用程序退出的时候会执行此事件。通常情况下,当程序处于主页面且用户点击返回按钮时触发。这时候,应用程序才会真正被终止。该事件只会被执行一次。在其响应函数中,可以放置一些保存代码,将一些信息保存到隔离存储里。
下图1.2为VS2012中App模板默认生成的代码。(位于App.xaml.cs文件中)
图1.2应用生命周期四个事件对应的响应代码