重要的应用程序接口(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。 有关详细信息,请参阅 后台任务指南。
注释
后台任务注册参数在注册时会被验证。 如果任何注册参数无效,则返回错误。 确保应用程序能够有效处理后台任务注册失败的情况——如果在尝试注册任务后应用程序依赖于拥有有效的注册对象,那么它可能会崩溃。