使用Windows 应用 SDK生成的桌面应用会持续运行,即使用户切换到另一个应用也是如此。 本文介绍后台执行的工作原理,并建议提高效率的最佳做法。
Important
桌面应用不会按照 UWP 应用的方式 自动暂停或终止 。 在用户关闭应用或进程退出之前,应用将继续执行。 无需特殊 API 或受限功能才能无限期运行。 适当时,使用系统内存通知来响应资源压力。
桌面应用可原生在后台运行
在 UWP 中,要无限期地在后台运行,需要 extendedBackgroundTaskTime 这一受限功能,并且必须通过企业部署。 桌面应用没有此限制。 无论窗口是否可见,应用的线程继续执行、计时器不断触发和网络连接保持打开状态。
这意味着可以执行下列操作:
- 维护与服务器的持久连接(例如聊天应用、实时监视)。
- 运行长时间计算(例如视频编码、数据分析)。
- 按计划轮询更新。
- 播放音频和更新媒体控件。
电池效率的最佳做法
尽管桌面应用可以不受限制地运行,但作为电池供电设备上的良好公民可改善用户体验。 如果应用在后台使用过多的 CPU 或网络,系统可能会将应用标记为大量资源使用者。
当窗口不可见时减少工作
// m_window is your app's main Window; _updateTimer is a DispatcherTimer field.
Microsoft.UI.Xaml.Window m_window = this;
Microsoft.UI.Xaml.DispatcherTimer _updateTimer = new();
m_window.Activated += (sender, args) =>
{
if (args.WindowActivationState == WindowActivationState.Deactivated)
{
// Window lost focus — slow down background processing
_updateTimer.Interval = TimeSpan.FromSeconds(30);
}
else
{
// Window is active — resume full-speed processing
_updateTimer.Interval = TimeSpan.FromSeconds(1);
}
};
采用电源感知型模式
- 减少计时器频率 - 当应用处于后台时,从次秒切换为多秒间隔。
- 暂停非基本呈现 — 停止动画、GPU 工作和屏幕更新。
- 批处理网络请求 - 将多个请求合并为更少、更大的请求。
- 尊重节电 - 检查 PowerManager.BatteryStatus 并在设备处于电池状态时减少工作。
using Windows.System.Power;
private bool _enableBackgroundSync = true;
private void CheckPowerState()
{
if (PowerManager.BatteryStatus == BatteryStatus.Discharging &&
PowerManager.RemainingChargePercent < 20)
{
// Reduce background work significantly
_enableBackgroundSync = false;
}
}
使用后台任务处理事件驱动型工作负载
如果你的应用需要响应系统事件(例如计时器、推送通知或网络更改),而不连续运行,请考虑改用后台任务:
var builder = new BackgroundTaskBuilder
{
Name = "PeriodicSync",
TaskEntryPoint = "MyApp.Background.SyncTask"
};
builder.SetTrigger(new TimeTrigger(15, false));
builder.Register();
注释
后台任务注册需要 MSIX 包标识。 如果应用已解压缩,请改用进程内计时器或计划任务。
关键工作的扩展执行
如果工作不应被电源管理中断(例如保存大型文件),请使用 扩展的执行会话。 这向系统发出信号,表明你的工作非常重要,即使在电池供电的设备上也是如此。
与 UWP 后台执行的比较
| 功能 | UWP | 桌面 |
|---|---|---|
| 应用在后台运行 | 仅具有后台任务或受限功能 | 始终 |
| 需要功能声明 | 是(extendedBackgroundTaskTime) |
否 |
| 系统终止以节省资源 | 是的 | 否 |
| 节电器限制 | 系统强制实施限制 | 应用应自我调节 |
| 用于事件驱动型工作的后台任务 | 主要机制 | 可选补充 |