Windows Phone执行模型还维护着用户使用应用程序和查看页面所产生的日志。利用该日志就能定义电话后退键所遵循的后退路径,从而提供给用户一个能够回退到不同应用程序和浏览页面的后退选项。
当用户通过导航键功能离开某一应用程序时,操作系统执行挂起该程序的步骤被称之为tombstoning,中文名称叫:“墓碑机制”。操作系统会维护应用程序状态信息。如果用户返回到被挂起的应用程序程序中,此时操作系统会继续执行被挂起应用程序的进程,并传递状态数据给此应用程序。
一个应用程序会在用户切换离开它时被逻辑删除,然而除了这个一般规则仍然存有一些例外。操作系统可能需要额外的资源保证前台运行程序的正常活动,那么此时在操作系统运行的运应用程序有可能在任何时候被逻辑删除,这点跟Android有点相似,唯一不同的是,Andriod 的KILL是杀死ACTIVITY页面,而不是杀死应用程序,我记得没错的话,应该是这样。
注意:在一般情况下调用应用程序并不会被逻辑删除,但是当操作系统开启一个应用时发现需要比当前可用资源更多的资源时,那么应用程序就可能被逻辑删除。
根据上图与Windows Phone 7生命周期相关的事件共分为以下五个部分:
- 启动
- 运行
- 关闭
- 禁止
- 激活
1.启动
当用户点击了手机上应用程序安装列表的某一应用程序,或者点击了开始屏幕上的代表某一应用程序的小方块图标,此时应用程序就被启动了。无论用户以哪种方式启动应用程序,该程序的实例就会被创建。当应用程序被启动了,也就是一个启动事件被触发了。处理这个启动事件时,应用程序应该从一个独立的存储中读取所有必要的数据来为用户创建一个新的应用程序会话进程。应用程序不应该试图从以前的应用程序实例中恢复瞬时状态。此是这是一个全新的应用实例。
Note that:启动和激活事件是互斥的。
2.运行
当启动事件被触发了,一个应用程序就开始运行了。应用程序处于运行状态时,用户进行浏览该应用程序的页面等相关操作,此时应用程序会自己管理自己的状态。如果应用程序处于运行状态,那么与执行模型相关的唯一操作就是逐步的保存设置以及其他应用程序持久化数据,这样做的目的是为了避免当应用程序的状态发生改变时需要保存大量的数据。
3.关闭
应用程序处于运行状态之后的状态是取决于用户采用了哪种操作。一个可能的操作是用户按下手机的回退键从而回退到应用程序的前一页面,甚至翻过了应用程序的第一个页面。当这种情况发生时,关闭事件会被触发,从时应用程序被终止
了。处理关闭事件,应用程序应该把所有的持久化数据保存到独立的存储中。此时没有必要保存瞬时状态数据,即那些只有和前应用程序实例相关的数据。因为用户如果要返回一个己经被终止的应用程序,唯一的方法应当是启动它,打开它的首页。这就是单任务的好处。
4.禁止
如果一个应用程序正在运行,随后在操作系统前台被另一个应用程序或者体验替代,例如,锁屏或者启动一个Chooser,这时第一个应用程序将会被禁止。禁止相当于Android的onPause事件。此时如果操作检测到资源不足,可能会对该程序进行逻辑删除。由于会存在被逻辑删除的危险,所以并不能保证一个被禁止的应用程序会被重新激活,所以在此事件的处理中应用程序需要一直把持久化数据保存到一个独立的存储空间。
Note that:禁止事件处理程序所进行的所有操作必须在10秒钟内完成,否则操作系统将会直接终止应用程序而不是逻辑删除。
5.激活
当一个应用程序被禁止后,有可能这个应用程序永远不会被再次激活。用户可能会从头再重新启动该应用程序,从而得到一个新的应用程序实例。或者用户可以启动其他几个应用程序,这样就会把处于应用程序堆栈最后的即使利用回退键也不可能到达的欺骗性程序关闭掉。当然用户也有继续要使用原应用程序的可能性。这种情况可能会发生在用户不停地敲击回退键来达到指定应用程序目的。这个和Android的回退键倒是十分相似。
开发人员可以使用墓碑机制事件来保存就应用程序状态和页面状态。利用这些状态,开发人员可以把应用程序恢复到最后一个正确的状态。你要了解一下以下两点:
- 应用程序状态 是就应用程序的一种状态且并不与任何特定页面有关联。应用程序状态是在 PhoneApplicationService 类公开的事件中管理的。
- 页面状态 是一种应用程序页面可见的状态。它包含了诸如 ScrollViewer 控件中滚轴的位置和 TextBox 控件
中的内容等信息。页面的状态管理应该由OnNavigatedTo 和 OnNavigatedFrom 事件处理程序来处理。