导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Windows Phone 8 的快速应用回收

2014/6/18

仅适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1

本主题介绍如何为 Windows Phone 8 应用启用快速应用恢复。在 Windows Phone 8 上,当用户导航离开应用程序时,应用程序将被挂起,其状态保留在内存中。如果用户通过按“后退”按钮或使用“任务切换器”返回应用程序,那么应用实例将恢复。因为应用被保留在内存中,所有应用可以快速恢复至用户导航离开时的状态。该过程被称为“快速应用切换 (FAS)”。如果应用被挂起,而用户重启应用,如通过点按应用列表中的应用名称或点按应用的主要开始磁贴,那么默认情况下,应用的旧实例将终止,应用的全新实例将创建出来。该过程比恢复已挂起的应用慢,而且用户体验也不一样。Windows Phone 8 引入该功能的原因是,一些应用要求的用户操作通常是重启应用,如点按应用的开始磁贴,而非恢复已挂起应用的已挂起实例(如果有的话)。该功能被称为“快速恢复”。有关 Windows Phone 应用生命周期的更多信息,请参见 Windows Phone 8 的应用激活和停用

启用“快速恢复”很容易。只需对应用清单文件进行微小的更改。但是,一旦您启用了“快速恢复”,当您的应用恢复时,对于应用如何管理之前所访问的页面的后退堆栈,有几个不同的选项。本主题将带您演练可以优化恢复体验的不同方式。

警告说明警告:

Direct3D 应用不区分全新启动和应用重启。这些应用总是恢复之前的体验。XAML 和 Direct3D 应用以及 Direct3D 和 XAML 应用可以像典型的 XAML 应用一样实现“快速恢复”。

本主题包括以下部分。

若要启用您的应用的“快速恢复”,则在 WMAppManifest.xml 中,将 ActivationPolicy 特性添加至 DefaultTask 元素,并且将值设为“Resume”。 对于此任务,您需要直接编辑应用清单,而不是使用清单编辑器。为此,右键单击 WMAppManifest.xml,单击“打开方式”,然后选择“XML(文本)编辑器”

XAML 应用、Direct3D 应用以及 Direct3D 和 XAML 应用可以启用“快速恢复”。以下示例演示对于 XAML 应用和 Direct3D 应用而言,DefaultTask 元素的外观。

<DefaultTask Name="_default" NavigationPage="MainPage.xaml" ActivationPolicy="Resume"/>

<DefaultTask Name="_default" ImagePath="PhoneDirect3DApp1.exe" ImageParams=""  ActivationPolicy="Resume"/>

实现“快速恢复”时,您应确定从手机上可用的不同启动点启动时,您的应用的最佳用户体验是什么。

  • 主要启动点将用户带到应用的主页。主要启动点包括“开始”屏幕上应用的主要磁贴、应用列表中的应用名称或游戏中心。

  • 深层链接将用户导航至应用内的其他页。 深层链接包括次要磁贴、Toast 通知、可扩展性点(如搜索)或照片中心。

对于 Windows Phone 应用,系统保持用户在应用内已访问的页面历史记录,这让用户可以使用“后退”按钮向后导航堆栈至之前访问的页面。通过“快速恢复”,当应用恢复时,系统为启动点目标创建新的页面实例,而且该页面放置在应用现有后退堆栈的顶部。在这种情况下,应用可以选择清除现有后退堆栈,而仅保留堆栈上新建的页面。在这种情况下,用户体验将如同“全新”的应用启动。如果他们从已恢复的应用向后导航,而历史记录中并无页面,那么他们将返回“开始”屏幕或之前的应用。处理“快速恢复”的另一种方式是取消导航至新建页面。在这种情况下,用户将到达他们最后浏览的应用页面,之前会话的后退堆栈将保持完整。看起来如同仅是他们之前的应用会话恢复了。

以下示例将考虑典型的 XAML 应用的不同用户体验。XAML 应用由三页组成。

  1. 主页

  2. 第 1 页 - 可通过主页中的链接访问

  3. 第 2 页 - 可通过固定到“开始”的次要磁贴访问

假设用户启动应用,到达主页,再导航至第 1 页,然后按“开始”按钮。下图显示应用的当前后退堆栈。

Fast Resume Series 1

假设用户使用手机,然后在某一刻使用应用的主要磁贴从“开始”再次启动应用。此时,系统为与该磁贴关联的 URI 创建新页面(在该情况下即主页),并将其置于后退堆栈的顶部。这是后退堆栈现在的外观。

Fast Resume Series 2

用户现在看到的是应用的主页。当用户点击“后退”按钮,那么在按“后退”按钮退出应用之前,用户将再次经过第 1 页,然后主页。这不是用户所期望的。因为用户刚刚从“开始”启动应用,主页显示出来,所以用户希望按一下“后退”按钮即返回至“开始”屏幕。

此时,您需要确定对于您的应用来说,什么是最佳用户体验。例如,您可以确定,如果用户只是短时间离开应用,那么应用恢复时则显示其最后浏览的页面,而如果用户离开应用的时间较长,则显示主页。

“全新实例”体验

若要提供“全新”体验,则在应用恢复时移除后退堆栈上的所有页面,向用户呈现的是主页。在下图中,您可以看到,之前所访问的页面已经从后退堆栈中移除,按“后退”按钮将退出应用。

Fast Resume Series 3

“恢复”体验

若要在应用恢复时恢复之前的体验,则取消导航至主页。这样,用户登录第 1 页,“后退”将如其所愿带他们返回主页。

Fast Resume Series 4

如果应用从主要启动点(如“开始”上的主要磁贴)启动,那么恢复之前的体验最为合理。对于深层链接而言,应用清除后退堆栈更合理。下面的示例说明原因所在。

考虑原始场景:用户启动应用,导航至第 1 页,然后按“开始”按钮。下图显示应用的后退堆栈。

Fast Resume Series 1

假设之后某个时间,用户再次启动应用,这次是从“开始”上的次要磁贴启动。磁贴的 URI 是指向第 2 页的深层链接。用户所看到的是第 2 页。当其按下“后退”按钮,在退出应用之前,用户将再次经过第 1 页,然后主页。 同样,这不是用户所期望的。在这种情况下,应用程序最好在导航至第 2 页之前清除后退堆栈。

Fast Resume Series 6

当应用程序恢复时,系统通过 ResetNavigationMode 值引发 RootFrame 上的 Navigated 事件。值 Reset 表示应用正在重启。此时,应用可以通过调用 RootFrame 上的 RemoveBackEntry() 来清除页面堆栈,直至清除完后退堆栈。

while (RootFrame.RemoveBackEntry() != null);

接下来,新页面创建出来,通过 NewNavigationMode 值导航至新页面。

应用程序恢复时,系统通过 ResetNavigationMode 值引发 RootFrame 上的 Navigated 事件。如果应用不需要清除之前的页面,则后退堆栈顶部的页面将通过 ResetNavigationMode 值接收 OnNavigatedTo,然后通过 NewNavigationMode 值接收 OnNavigatedFrom。此时,应用可以通过在 RootFrame 的 Navigating 事件中设置 NavigatingCancelEventArgs 参数上的 e.Cancel = true 来取消导航至新页面。

当使用与后退堆栈顶部的页面的 URI 相同的 URI 重启应用时,系统不会创建新页面,但是它会指示应刷新顶部页面。无需清除后退堆栈或取消导航。

在此情况下,将两次导航至后退堆栈顶部的页面,第一次通过 ResetNavigationMode 值,第二次通过 RefreshNavigationMode 值。第二次导航发生时,应用可以选择刷新它的状态,例如从云中拉取已更新的数据。

若要查看或下载实现快速恢复和展示后退堆栈管理的示例应用,请参见快速恢复后退堆栈示例

显示:
© 2014 Microsoft