在后台无限期运行
为了为用户提供最佳体验,Windows 对 通用 Windows 平台 (UWP) 应用施加资源限制。 前台应用获得最多的内存和执行时间;后台应用越来越少。 因此,用户免受前台应用性能不佳和电池耗尽的防护。
但是,编写 UWP 应用供个人使用的开发人员(也就是说,不会在 Microsoft 应用商店中发布旁加载的应用)或编写企业 UWP 应用的开发人员可能需要在设备上使用所有可用资源,而无需任何后台或扩展执行限制。 业务线和个人 UWP 应用程序可以使用 Windows 创意者更新(版本 1703)中的 API 来关闭限制。 请注意,如果应用使用这些 API,则无法将应用放入 Microsoft 应用商店中。
最小化时运行
UWP 应用在前台未运行时移动到挂起状态。 在桌面上,当用户最小化应用时,会出现这种情况。 应用使用扩展执行会话,以便在最小化时继续运行。 Microsoft应用商店接受的扩展执行 API 在 延期应用挂起中详细介绍了扩展执行。
如果要开发不打算提交到 Microsoft 应用商店的应用,则可以使用 ExtendedExecutionForegroundSession 和 extendedExecutionUnconstrained
受限功能,以便应用可以在最小化时继续运行,而不管设备的能量状态如何。
该功能 extendedExecutionUnconstrained
将作为受限功能添加到应用的清单中。 有关受限功能的详细信息,请参阅 应用功能声明 。
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
该功能时, 将使用 ExtendedExecutionForegroundSession 和 ExtendedExecutionForegroundReason ,而不是 ExtendedExecutionSession 和 ExtendedExecutionReason。 创建会话、设置成员和请求扩展的相同模式仍适用:
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;
}
应用进入前台后,可以立即请求此扩展执行会话。 不受约束的扩展执行会话不受能源配额或操作系统节电器的限制。 只要存在对会话对象的引用,应用就会保持运行状态,并且不会进入挂起状态。 如果用户关闭了应用,会话将被撤销。
注册 吊销 事件将使应用能够执行所需的任何清理工作。 处于挂起状态时,你可以利用 ExtendedExecutionReason.SavingData 创建扩展执行会话,以在终止应用并将其从内存中删除之前保存用户数据。
无限期运行后台任务
在通用 Windows 平台中,后台任务是在后台运行且没有任何形式的用户界面的进程。 后台任务通常在取消前最多运行 25 秒。 某些长时间运行的任务还有一个检查,以确保后台任务不会处于空闲状态或使用内存。 在 Windows 创意者更新(版本 1703)中 ,引入了 extendedBackgroundTaskTime 受限功能来删除这些限制。 扩展 BackgroundTaskTime 功能在应用的清单文件中添加为受限功能:
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 功能来创建可根据需要运行的应用,而不管设备的资源可用性如何。
请注意, extendedExecutionUnconstrained 和 extendedBackgroundTaskTime 功能可以替代 UWP 应用的默认策略,并可能导致严重的电池耗尽。 在使用这些功能之前,请先确认默认的扩展执行和后台任务时间策略不满足你的需求,并在受电池约束的情况下执行测试,以了解应用对设备的影响。