使用维护触发器

重要的 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 以便在 Internet 可用时(或者变为可用时)运行维护。 有关可能的后台任务条件列表,请参阅 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。 有关详细信息,请参阅后台任务指南

注意

后台任务注册参数在注册时验证。 如果有任何注册参数无效,则会返回一个错误。 确保你的应用能够流畅地处理后台任务注册失败的情况,否则,如果你的应用依赖于在尝试注册任务后具备有效注册对象,则它可能会崩溃。