如何暂停应用 (HTML)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

了解当系统暂停你的 Windows 运行时应用时如何保存重要的应用程序数据。 当你的应用被系统暂停时,它可能随后被终止而不发出警告。请务必保存应用中用户的当前状态,以便在应用重新启动时可以恢复该状态。不要让用户知道应用在后台被暂停和终止。

下列步骤将介绍如何注册 checkpoint 事件并使用该事件保存一些基本的应用状态。

说明

步骤 1: 注册 checkpoint 事件

在全局范围内注册 checkpoint 事件。此事件指示系统将暂停你的应用。在应用暂停后,系统将确定释放系统资源。出于此原因,因此在检查点事件期间保存你的应用的数据尤为重要。


var app = WinJS.Application;

app.addEventListener("checkpoint", checkpointHandler);

步骤 2: 在挂起之前保存应用程序数据

当你的应用处理 checkpoint 事件时,它将有机会将其重要的应用程序数据保存到 checkpoint 事件的处理程序函数中。应用可以使用 sessionState 对象来同步保存简单的应用程序数据。sessionState 对象会保留数据,以便应用在终止后激活期间可以访问这些数据。

function checkpointHandler(eventArgs) 
{
    var stateObject = new Object();

    // TODO: Populate the state object with app data

    // Save the state object to the session object
    app.sessionState.stateObject = stateObject;
}

步骤 3: 释放独占资源和文件句柄

当你的应用处理 checkpoint 事件时,它还将有机会释放独占资源和文件句柄。独占资源的示例为相机、I/O 设备、外部设备以及网络资源。显式释放独占资源和文件句柄有助于确保你的应用未使用它们时其他应用可以访问它们。当在终止后又激活应用时,它应该打开其独占资源和文件句柄。

备注

每当用户切换到桌面或其他应用时,系统都会暂停你的应用。每当用户切回到你的应用时,系统就会恢复你的应用。当系统恢复你的应用时,你的变量和数据结构的内容与系统将你的应用暂停之前的内容相同。系统会将你的应用完全恢复到你离开时的状态,使用户感觉你的应用好像一直在后台运行一样。

当你的应用被暂停后,系统会尝试将你的应用及其数据保留在内存中。然而,操作系统在暂停应用后可能出于一些原因而将其终止。发生这种情况的示例如下:用户手动关闭应用、用户注销或者系统的资源不足。当用户切换回已终止的应用时,该应用会收到 activated 事件,且应该检查其 sessionState 对象是否已定义。如果对象已定义,则应用应该加载该数据。

当终止应用时系统不会通知应用,因此当暂停应用时,你的应用必须保存其应用程序数据并释放独占资源和文件句柄,并在应用从暂停状态恢复时或在终止后激活时还原这些内容。

注意  如果在应用暂停期间,你需要执行一些异步工作,则需要将暂停完成时间延迟到工作完成之后。你可以使用 checkpoint 事件参数的 detail 属性上的 setPromise 方法将暂停的完成延迟到你完成承诺之后。

 

注意  为了改进 Windows 8.1 和 Windows Phone 中的系统响应,在应用暂停时,我们为应用提供低优先级的资源访问。为了支持新的优先级,延长了暂停操作超时,以便应用具有与普通优先级相当的 5 秒超时(在 Windows 上)以及 1 到 10 秒超时(在 Windows Phone 上)。 你无法扩展或改变此超时窗口。

 

关于使用 Microsoft Visual Studio 进行调试的注释: Visual Studio 禁止 Windows 暂停连接到调试程序的应用。这是为了允许用户在应用正在运行时查看 Visual Studio 调试 UI。调试应用时,可以使用 Visual Studio 将一个暂停事件发送给该应用。 请确保“调试位置”工具栏显示出来,然后单击“暂停”****图标。

完整示例

有关展示如何处理应用生命周期事件的完整代码示例,请参阅使用 WinJS 示例的应用激活和暂停使用 WRL 示例的应用激活、恢复和暂停

相关主题

任务

如何激活应用

如何恢复应用

概念

应用程序生命周期

指南

应用的暂停和恢复指南

参考

WinJS.Application.checkpoint

WinJS.Application.sessionState