Windows Phone 执行模型概述生命周期


 

Windows Phone 执行模型控制生命周期的应用程序上运行 Windows Phone,从当应用程序启动时直到它被终止。
执行模型被为了向最终用户提供快捷、 反应迅速的经验,在所有的时间。要达到这个目标,Windows Phone 优先前台应用程序并在大多数情况下,终止所有后台应用程序。这消除了用户在多个应用程序都在后台运行,一个进入他们的设备中的前景变得缓慢导致应用程序的可能性。
除了响应能力,执行模式为用户提供应用程序之间的一致的导航经验。在 Windows Phone 上用户向前导航由启动从已安装的应用程序列表中或平铺在启动的应用程序。通过网页的一个正在运行的应用程序,或以前通过使用返回的硬件按钮运行应用程序的堆栈的用户还可以倒退,导航。
若要通过限制手机上一次运行一个应用程序中启用无缝导航,Windows Phone 激活,并将停用应用程序动态,提高它们的状态发生更改时作出响应的应用程序的事件。通过实施这些事件处理程序,开发人员可以保存并恢复其活动和非活动状态之间的应用程序转换为应用程序状态。这种行为创建的经验,在用户看来,似乎像应用程序继续在后台运行。本主题将详细地解释 Windows Phone 应用程序的生命周期,并描述,开发人员可以使用模型事件执行的利用的战略。
虽然,操作系统管理的所有应用程序执行相同的方式,处理 XNA 游戏应用程序中断,要求一些特别的考虑。如果您正在创建基于新华社的应用程序,您应阅读此部分,并也读取文档,Windows Phone 7 游戏为逻辑删除。
术语
本节列出的一些术语,用于描述 Windows Phone 执行模型。

Term                                                                                           Definition

    Tombstoning                                                  在操作系统终止应用程序的过程,当用户导航应用程序的过程。操作系统维护应用程序的状态信息。如果用户导航回用                                                                      程序、 操作系统重新启动应用程序进程,并将状态数据传递回该应用程序。

Page state

可视状态的应用程序页。这包括诸如 ScrollViewer 控件的滚动位置和 TextBox 控件的内容。管理页中的 OnNavigatedTo 和 OnNavigatedFrom 的事件处理程序的状态。

Application state

不与特定的页相关联的应用程序的状态。应用程序状态被管理中暴露出的 PhoneApplicationService 类的事件。
 

Persistent data

由应用程序的所有实例共享的数据。持久性数据是保存和加载从独立存储。应保留应用程序执行之间的持久性数据的示例应用程序设置。

 

Transient state

描述应用程序的单个实例的状态的数据。瞬态数据存储在 PhoneApplicationService 类提供的状态词典中。一个逻辑删除的应用程序还原其瞬态状态,当它处于激活状态。瞬间状态的一个示例是一个 Web 服务查询所返回的数据。此选项可以存储在逻辑删除,以减少需要再次执行该查询,如果用户快速返回到应用程序的应用程序时。


这一节将穿过 Windows Phone 应用程序,描述的用户操作,将会导致要更改,应用程序的状态,并突出显示的开发者应该在他们的代码,以创建一致的用户体验中处理的事件的整个生命周期。在这一节中提到的生命周期相关的事件都是 PhoneApplicationService Microsoft.Phone.Shell 命名空间中的类的成员。Windows Phone 开发工具提供的项目模板包含的 Windows Phone  这些项目的 App.xaml.cs 文件中的事件处理程序。

Launching

Windows Phone 应用程序被认为"推出"当它启动时的一种手段以外的其他用户按后退按钮返回到以前的应用程序。当用户点击应用在手机的安装的应用程序列表中的条目或拼贴上启动的应用程序时,将启动一个应用程序。可以以其他方式以及启动应用程序,例如当用户点击一个推送通知。每当用户启动应用程序,使用下列方法之一,被创建应用程序的一个新实例。当应用程序启动时,启动事件引发。应用程序应该不加载状态数据从独立存储在此事件处理程序中。因为之前该应用程序是可见的或活动,将引发此事件,执行耗时的任务,比如访问独立存储可以提供一种不好的用户体验,应用程序将需要很长的时间来加载。相反,对独立存储和网络资源的调用应执行异步加载应用程序之后。当应用程序启动时,应用程序不应尝试还原瞬态状态从以前的应用程序实例。当用户启动一个应用程序时,它应始终显示为一个新的实例。
 
运行 Running
启动事件的处理后,应用程序将开始运行。在这种状态应用程序时,它管理着其自己的状态,当用户通过该应用程序的页导航。只有执行模型相关任务的应用程序可能会在这种状态期间执行是以增量方式保存设置和其他持久性的数据,以减少需要在应用程序的状态更改时保存的数据量。这是可选的并有少量的持久化数据的应用程序,可能是不必要。

关闭 Closing
遵循运行状态的应用程序状态取决于用户采取的操作。一种可能性是,用户按下硬件后退按钮向后浏览页面的应用程序,该应用程序的第一页过去。当发生这种情况时,关闭事件引发并终止应用程序。内为此事件处理程序中,应用程序应将持久性数据保存到的独立存储。它不需要保存瞬态状态数据,只涉及的当前实例的应用程序,因为它终止后返回到应用程序的用户的唯一出路是要再次启动它,如前一节所述,应用程序应显示要新鲜的情况下,当用户启动他们的数据。

 
停用 Deactivating
如果一个应用程序正在运行,并且随后已被另一个应用程序或经验更换在前台,第一个应用程序将被停用。有几种方法可以在其中调用此状态。如果用户按开始按钮,或者如果设备超时导致锁定屏幕进行,应用程序将被停用。应用程序可能还被停用,当它调用发射器或选择器,允许用户执行常见任务,如拍照或发送电子邮件的帮助应用程序。在这些情况下,运行的应用程序将被停用,Deactivated 事件引发。与不同的应用程序将终止,已停用的应用程序可能会成为逻辑删除。这意味着它不再运行,但操作系统的应用程序的记录和存储应用程序状态数据的一组。有可能,用户将返回到一个逻辑删除的应用程序,此时它将重新激活。

在 Deactivated 事件处理程序中,应用程序应存储在字典里,通过 PhoneApplicationService 类的状态属性公开其当前状态有关的信息。瞬态状态数据或将有助于重新建立应用程序的状态之前它被停用, 该应用程序的数据存储在这本词典中的数据。因为不能保证永远将重新激活一个逻辑删除的应用程序,应用程序应该也将保存持久性数据到独立存储在此事件中。在停用的事件处理程序中采取的行动的所有必须在十秒内完成或操作系统将终止该应用程序。这就是为什么具有大量的持久化数据的应用程序可能想要以增量方式保存,在应用程序运行。

它有可能被停用,而不是逻辑删除的应用程序。例如,如果用户在快速连续按开始按钮,然后后退按钮。在这种情况下,将会引发 Deactivated 事件,然后将引发该激活事件,但将不会调用该应用程序的构造函数。出于此原因,很重要的活性炭的事件处理程序中重新创建您处置在 Deactivated 事件处理程序中的资源。

激活 Activating
应用程序已停用和逻辑删除后,有可能它将永远不会被重新激活。用户可以启动应用程序再次从开始时,调用应用程序的一个新实例。或者,用户可以启动其他几个应用程序,敲门背面的不能使用后退按钮达成的应用程序堆栈的逻辑删除应用程序。它也有可能,用户将返回到应用程序。如果用户按后退按钮,直到达到该应用程序时,这可能发生。或者,如果一个发射器或选择器失效的原因,用户可以完成任务或取消它。当用户返回到一个逻辑删除的应用程序时,它被重新激活和活性炭事件引发。在此事件中,应用程序可以从状态词典 PhoneApplicationService 类要重新建立的用户在该应用程序之前经历了停用该应用程序状态中读取值。像发射处理程序中,应用程序不应访问的网络资源或独立存储在此事件处理程序内。这样做将导致应用程序启动缓慢。

 
原文地址:https://www.cnblogs.com/fxiaoquan/p/2588407.html