此页面有用吗?
您对此内容的反馈非常重要。 请告诉我们您的想法。
更多反馈?
1500 个剩余字符
导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Windows Phone 8 的应用激活和停用

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

本主题介绍 Windows Phone 应用的生命周期以及应用应该如何处理激活和取消激活。在 Windows Phone 上,任意给定时间内仅允许一个应用在前台运行。必须确保用户正在使用的应用具有可提供流畅和快速响应体验所需的资源。由于一次仅一个应用可在前台运行,当用户离开应用时,应用将挂起或终止,具体取决于上下文和用户导航离开的方式。Windows Phone 应用模型提供一组事件和相关的 API,允许您的应用在提供一致和直观的用户体验的情况下,处理激活和取消激活。

说明注意:

位置感知应用可在主动跟踪位置时在后台运行。有关更多信息,请参见如何在 Windows Phone 8 的后台运行位置跟踪应用

本主题包括以下部分。

 

下图演示了 Windows Phone 应用的生命周期。在该图中,圆圈表示应用程序的状态。矩形显示应用程序应管理其状态的应用程序级别或页面级别的事件。

Execution Model Diagram for Windows Phone 7.5

本节探讨了 Windows Phone 应用的应用程序生命周期并突出显示了您的应用在每一步中应采取的操作。本节引用了 PhoneApplicationPagePhoneApplicationService 对象的事件和属性。这些对象将作为 Windows Phone SDK 随附的任意 Windows Phone 托管应用程序项目模板的一部分来提供。要查看使用这些 API 的代码示例,请参见如何保留和还原 Windows Phone 8 的页面状态以及如何保留和还原 Windows Phone 8 的应用状态。有关事件及应用应执行的操作的简化清单,请参见执行模型事件和应用操作摘要

Launching 事件

用户可从已安装的应用程序列表或从“开始”中的图块或通过其他方式(如点击与应用相关的 Toast 通知或从“Photos Extras”菜单中选择应用)启动应用的新实例。采用此方法启动应用后,应用需显示一个用户界面,以使用户明确了解该应用已启动的新实例。可以提供有关用户使用该应用的先前经验的上下文(例如,用户最近查看的文档),但不可显示成用户似乎正返回先前运行的应用。

启动应用的新实例后,将引发 Launching 事件。为了帮助确保应用快速加载,应在该事件的处理中执行尽可能少的代码。特别是,避免文件和网络操作等资源密集型任务。您应在应用加载之后,在后台线程中执行这些任务以便实现最佳的用户体验。

运行

启动之后,应用处于运行状态。在用户向前导航、离开应用或向后导航到应用的第一个页面之前,应用将持续运行。Windows Phone 应用不应为用户提供退出应用的机制。当手机的锁定屏幕功能启动时,应用将保持运行状态,除非您已禁用应用空闲检测。有关更多信息,请参见 Windows Phone 8 空闲检测

OnNavigatedFrom 方法

当用户导航离开您的应用的某个页面时,将会调用 OnNavigatedFrom(NavigationEventArgs) 方法。这可能是由应用程序中的普通页面导航导致的,但是当用户导航出您的应用时,也可以调用该方法。每当调用该方法时,应用程序都应存储页面的状态,以便在用户返回到页面和页面不再位于内存中时可以还原应用程序。向后导航除外。可以使用 NavigationMode 属性来确定导航是否为向后导航,若为向后导航,则无需保存状态,因为页面将在下次访问时重新创建。

在某些情况下,您可能希望将状态同时保存在 OnNavigatingFrom(NavigatingCancelEventArgs) 方法中。尤其是在存储 MediaElement 控件的状态时,您将需要执行此操作。

Deactivated 事件

当用户向前导航、导航出您的应用、按“开始”按钮或启动其他应用时,都将会引发 Deactivated 事件。如果您的应用程序启动选择器,也会引发 Deactivated 事件。有关选择器的更多信息,请参见 Windows Phone 8 启动器和选择器。当设备的锁定屏幕功能启动时,也会引发该事件,除非已禁用应用程序空闲检测。

Deactivated 事件的处理程序中,您的应用程序应保存任何未保存的应用程序数据,以便将来在需要时还原。 Windows Phone 应用随 State 对象一起提供,后者是可以用来存储应用程序状态的字典。如果操作系统逻辑删除了您的应用(如下所述),将保存此字典并在您的应用被重新激活后返回给您。

在调用 Deactivated 后,应用程序可能会被完全终止。当应用程序终止时,其状态将不保留。因此,还应在 Deactivated 事件期间,将应用程序实例间应保留的所有未保存状态存储到独立存储中。

休眠

当用户向前导航或导航出应用时,引发 Deactivated 事件后,操作系统将尝试使应用置于休眠状态。在此状态下,应用程序的所有线程均将停止,并且不进行任何处理操作,但应用程序仍完好地保留在内存中。如果应用是从休眠状态重新激活的,则无需执行任何操作来重建状态,因为状态已被保留。

如果在应用进入休眠状态后启动新的应用,这些应用需要更多的内存才能提供出色的用户体验,操作系统将开始逻辑删除休眠的应用以释放内存。

已逻辑删除

已终止逻辑删除的应用,但操作系统不仅保留了有关其导航状态的信息,而且还保留了 Deactivated 期间填充应用的状态字典。设备每次最多可维护五个应用的逻辑删除信息。如果在逻辑删除应用之后,用户向后导航至应用程序,则应用程序将会重新启动并使用保留的数据还原状态。

Activated 事件

当用户返回到休眠或逻辑删除的应用时,将调用 Activated 事件。应用应检查事件参数的 IsApplicationInstancePreserved 属性,以确定应用是从休眠状态返回,还是从逻辑删除状态返回。如果 IsApplicationInstancePreserved 为 true,则应用之前处于休眠状态,状态已由操作系统自动保留。若为 false,则应用之前已被逻辑删除,应用应使用状态字典来还原应用程序状态。在执行 Activated 事件处理程序期间,应用程序不应执行资源密集型任务(例如,从独立存储或网络资源加载内容),因为这会增加应用程序恢复所用的时间。而是应在加载应用程序之后,在后台线程中执行这些操作。由于在重新激活您的应用时,您在 Deactivated 期间保存的状态字典将显示在内存中,您可以用这些字典来还原状态,而避免产生资源密集型文件操作的开销。

OnNavigatedTo 方法

当用户导航到页面时,即会调用 OnNavigatedTo(NavigationEventArgs) 方法。这包括当应用第一次启动时、用户在应用的页面之间进行导航时以及在应用休眠或被逻辑删除后重新启动时。在此方法中,应用应检查是否页面为新实例。若不是新实例,则页面状态无需还原。若页面为新实例,并且在页面的状态字典中存在数据,则应使用该数据来还原页面 UI 的状态。

Closing 事件

当用户向后导航到应用的第一页时,即会引发 Closing 事件。在这种情况下,应用将终止,并且不会保存状态。在 Closing 事件处理程序中,您的应用可以保存应跨实例保留的数据。应用完成所有应用程序和页面导航事件的时间被限定为 10 秒。若超出此限度,则应用程序将终止。因此,最好保存整个应用程序生存期的持续状态,避免在 Closing 事件处理程序中执行大量的文件 I/O 操作。

警告说明警告:

如果您的应用不在前台时被操作系统终止,则不会引发 Closing 事件。应用程序可依靠接收 Deactivated 事件,而不是 Closing。出于此原因,您应该在 Deactivated 事件处理程序中执行所有必要的清理和状态维护任务。

下表是应用程序生命周期内所发生事件和应用应针对每个事件执行的操作的简短摘要。

事件或方法

应用程序操作

Launching 事件

执行非常少量的代码。不要执行资源密集型操作,例如,访问独立存储。

OnNavigatedFrom 方法

如果不是向后导航,则将 UI 状态保存到 State 字典。

Deactivated 事件

当应用被逻辑删除时,将应用状态保存到 State。同时,在应用程序终止时,将持续状态保存到独立存储。当应用进入休眠状态时,不要销毁内存中应用的状态。

Activated 事件

检查 IsApplicationInstancePreserved。若为 true,则不执行任何操作。若为 false,则使用 State 中的数据还原应用程序状态。

OnNavigatedTo 方法

检查页面是否为新实例。若不是,则状态自动保持。否则,如果 State 中存在数据,则使用该数据还原 UI。

Closing 事件

将持续应用程序数据保存到独立存储。

警告说明警告:

通过本节所述的事件,您可以在应用程序进入和离开前台时保存和还原状态。但是,推荐的做法是在状态数据发生更改时立即保存状态数据。例如,当收到来自网络的某个 Web 请求时,可以立即将其结果保存到磁盘和/或应用程序状态字典中。您不应等到 Deactivated 事件发生后才存储此数据。请记住,所有应用程序生命周期事件都强制限定应用程序在 10 秒钟的时间内完成所有任务。

显示:
© 2015 Microsoft