在后台无限期运行

为了为用户提供最佳体验,Windows 对通用 Windows 平台(UWP)应用施加资源限制。 前台应用获得最多的内存和执行时间;后台应用越来越少。 因此,用户免受前台应用性能不佳和电池耗尽的防护。

但是,编写 UWP 应用供个人使用的开发人员(也就是说,不会在 Microsoft 应用商店中发布旁加载的应用)或编写企业 UWP 应用的开发人员可能需要在设备上使用所有可用资源,而无需任何后台或扩展执行限制。 业务和个人 UWP 应用程序可以使用 Windows 创意者更新版(版本 1703)中的 API 来关闭限制节流。 请注意,如果应用使用这些 API,则无法将应用放入 Microsoft 应用商店中。

最小化时运行

当 UWP 应用没有在前台运行时,它们会转入挂起状态。 在桌面上,当用户最小化应用时,会出现这种情况。 应用程序使用扩展的执行会话,以便在最小化时继续运行。 Microsoft应用商店接受的扩展执行 API 在 推迟应用挂起以及扩展执行中详细介绍。

如果要开发未提交到 Microsoft 应用商店的应用,则可以将 ExtendedExecutionForegroundSessionextendedExecutionUnconstrained 受限功能一起使用,以便应用可以在最小化时继续运行,而不管设备的能量状态如何。  

extendedExecutionUnconstrained 功能作为应用程序清单中的受限功能添加。 有关受限功能的详细信息,请参阅 应用功能声明

注释

添加 xmlns:rescap XML 命名空间声明,并使用 rescap 前缀声明该属性。

有关详细信息,请参阅 应用功能声明的“受限功能”部分。

Package.appxmanifest

<Package
    ...
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp rescap">
  ...
  <Capabilities>
    <rescap:Capability Name="extendedExecutionUnconstrained"/>
  </Capabilities>
</Package>

使用 extendedExecutionUnconstrained 功能时,将使用 ExtendedExecutionForegroundSessionExtendedExecutionForegroundReason,而不是 ExtendedExecutionSessionExtendedExecutionReason。 在异步创建会话、设置成员和请求扩展时,仍然适用相同的模式:

var newSession = new ExtendedExecutionForegroundSession();
newSession.Reason = ExtendedExecutionForegroundReason.Unconstrained;
newSession.Description = "Long Running Processing";
newSession.Revoked += SessionRevoked;
ExtendedExecutionForegroundResult result = await newSession.RequestExtensionAsync();
switch (result)
{
    case ExtendedExecutionForegroundResult.Allowed:
        DoLongRunningWork();
        break;

    default:
    case ExtendedExecutionForegroundResult.Denied:
        DoShortRunningWork();
        break;
}

应用进入前台后,可以立即请求此扩展执行会话。 不受限制的扩展执行会话不受能源配额或操作系统电池节能模式的限制。 只要存在对会话对象的引用,应用就会保持运行状态,并且不会进入挂起状态。 如果用户关闭了应用,会话将被撤销。

Revoked 事件注册将使你的应用程序能够执行所需的任何清理工作。 在暂停状态下,可以使用 ExtendedExecutionReason.SavingData 创建扩展执行会话,以在应用终止并从内存中删除之前保存用户数据。

无限期运行后台任务

在通用 Windows 平台中,后台任务是在后台运行且没有任何形式的用户界面的进程。 后台任务通常在取消前最多运行 25 秒。 某些长时间运行的任务还设置了一项检查,以确保后台任务既不会处于空闲状态,也不会不必要地占用内存。 在 Windows 创意者更新(版本 1703)中,引入了 extendedBackgroundTaskTime 受限功能来删除这些限制。 extendedBackgroundTaskTime 功能作为应用清单文件中的受限功能添加:

注释

添加 xmlns:rescap XML 命名空间声明,并使用 rescap 前缀声明该属性。

有关详细信息,请参阅 应用功能声明的“受限功能”部分。

Package.appxmanifest

<Package
    ... 
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp rescap">
...
  <Capabilities>
    <rescap:Capability Name="extendedBackgroundTaskTime"/>
  </Capabilities>
</Package>

此功能消除了执行时间限制和空闲任务监视器。 启动后台任务后,无论是通过触发器还是应用服务调用启动的,一旦获取到由 Run 方法提供的 BackgroundTaskInstance 的延迟,就可以无限期运行。 如果应用设置为 由 Windows 管理,则它可能会受到能量配额的限制,并且其后台任务在电池节能模式开启时不会激活。 这可以通过 OS 设置进行更改。 更多信息在 优化后台活动中提供。

通用 Windows 平台监视后台任务执行,以确保良好的电池电量和流畅的前景应用体验。 但是,个人应用和企业业务线应用可以使用扩展执行功能和 extendedBackgroundTaskTime 能力来创建应用,这些应用可以根据需要运行,而不受设备资源可用性的限制。

请注意,extendedExecutionUnconstrainedextendedBackgroundTaskTime 功能可以替代 UWP 应用的默认策略,并可能导致大量电池耗尽。 在使用这些功能之前,请先确认默认的扩展执行和后台任务时间策略不满足你的需求,并在受电池约束的情况下执行测试,以了解应用对设备的影响。

另请参阅

删除后台任务资源限制