使用维护触发器

重要的应用程序接口(API)

了解如何在插入设备时使用 MaintenanceTrigger 类在后台运行轻型代码。

创建维护触发器对象

此示例假设你有可在后台运行的轻量级代码,以在设备插入时增强应用。 本主题重点介绍 MaintenanceTrigger,该主题类似于 SystemTrigger

有关编写后台任务类的详细信息,请参阅 创建和注册进程内后台任务创建和注册进程外后台任务

创建新的 MaintenanceTrigger 对象。 第二个参数 OneShot 指定维护任务是只运行一次还是定期运行。 如果 OneShot 设置为 true,则第一个参数(FreshnessTime)指定在计划后台任务之前需要等待的分钟数。 如果 OneShot 设置为 false,FreshnessTime 指定后台任务运行的频率。

注释

如果将 FreshnessTime 设置为小于 15 分钟,则注册后台任务时会抛出异常。

此示例代码创建一个每小时运行一次的触发器。

uint waitIntervalMinutes = 60;
MaintenanceTrigger taskTrigger = new MaintenanceTrigger(waitIntervalMinutes, false);
uint32_t waitIntervalMinutes{ 60 };
Windows::ApplicationModel::Background::MaintenanceTrigger taskTrigger{ waitIntervalMinutes, false };
unsigned int waitIntervalMinutes = 60;
MaintenanceTrigger ^ taskTrigger = ref new MaintenanceTrigger(waitIntervalMinutes, false);

(可选)添加条件

  • 如有必要,请创建一个后台任务条件来控制任务何时运行。 条件可防止后台任务在满足条件之前运行 - 有关详细信息,请参阅 “设置运行后台任务的条件”

在此示例中,条件设置为 InternetAvailable,以便在互联网可用时(或变得可用时)运行维护。 有关可能的后台任务条件的列表,请参阅 SystemConditionType

以下代码向维护任务生成器添加条件:

SystemCondition exampleCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition exampleCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ exampleCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

注册后台任务

  • 通过调用后台任务注册函数注册后台任务。 有关注册后台任务的详细信息,请参阅 注册后台任务

以下代码注册维护任务。 请注意,它假设你的后台任务在独立于应用程序的进程中运行,因为它指定了 entryPoint。 如果后台任务与应用在同一进程中运行,则不指定 entryPoint

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Maintenance background task example";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Maintenance background task example" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Maintenance background task example";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition);

注释

对于除桌面以外的所有设备系列,如果设备内存不足,后台任务可能会终止。 如果未显示内存不足异常,或者应用未处理它,则后台任务将终止而不发出警告且不引发 OnCanceled 事件。 这有助于确保应用在前台运行时的用户体验。 您的后台任务应设计为处理此场景。

注释

通用 Windows 平台应用必须在注册任何后台触发器类型之前调用 RequestAccessAsync

为了确保在应用发布更新后,您的通用 Windows 应用能够继续正常运行,您必须先调用 RemoveAccess,然后在更新后应用启动时再调用 RequestAccessAsync。 有关详细信息,请参阅 后台任务指南

注释

后台任务注册参数在注册时会被验证。 如果任何注册参数无效,则返回错误。 确保应用程序能够有效处理后台任务注册失败的情况——如果在尝试注册任务后应用程序依赖于拥有有效的注册对象,那么它可能会崩溃。