如何设置后台任务的运行条件 (HTML)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

了解如何为运行后台任务设置条件,帮助其仅在合适时运行。 有时,除了触发该任务的事件之外,后台任务还需要满足某些条件以便后台任务可以继续。你可以在注册后台任务时指定由 SystemConditionType 指定的一个或多个条件。引发触发器之后将检查条件;后台任务将进入队列,但在满足所有所需条件之前不会运行。

对后台任务设置条件可阻止任务不必要地运行,从而节省电池电量和 CPU 运行时。例如,如果你的后台任务在计时器上运行并要求 Internet 连接,请在注册该任务之前将 InternetAvailable 条件添加到 TaskBuilder。通过在计时器时间过去以及 Internet 可用时让任务运行,有助于防止任务使用不必要的系统资源和电池寿命。

你需要了解的内容

技术

先决条件

  • 本主题假定你的后台任务已与你的应用关联,且你的应用已包含用于创建名为 taskBuilderBackgroundTaskBuilder 对象的代码。

说明

步骤 1: 创建 SystemCondition 对象

添加该条件之前,创建一个代表该条件的 SystemCondition 对象,该对象必须实际用于运行后台任务。在构造函数中,通过提供一个 SystemConditionType 枚举值指定必须满足的条件。

以下代码创建一个 SystemCondition 对象,该对象将 Internet 可用性指定为条件要求:

var internetCondition = new Windows.ApplicationModel.Background.SystemCondition(Windows.ApplicationModel.Background.SystemConditionType.InternetAvailable);

步骤 2: 向你的后台任务中添加 SystemCondition 对象

要添加条件,请在 BackgroundTaskBuilder 对象上调用 AddCondition 方法,并向其传递 SystemCondition 对象。

下面的代码将使用 TaskBuilder 注册 InternetAvailable 后台任务条件:

taskBuilder.AddCondition(internetCondition);

步骤 3: 注册后台任务

现在,你便可以使用 Register 方法注册后台任务了,该任务在满足指定的条件之前不会启动。

以下代码注册该任务并存储所得到的 BackgroundTaskRegistration 对象:


var task = taskBuilder.Register();

注意  

在 Windows Phone 应用商店应用中,你必须在尝试注册任何后台任务之前调用 RequestAccessAsync。在 Windows 上,仅需在后台任务要求应用在锁屏上才能运行的情况下进行该调用,但在手机上,你必须在每次注册任何后台任务之前调用该方法。

若要确保 Windows Phone 应用在你发布更新后继续正常运行,你必须在启动已经过更新的应用时调用 RemoveAccess,然后调用 RequestAccessAsync。有关详细信息,请参阅后台任务指南 (HTML)

注意  

从 Windows 8.1 开始,后台任务注册参数在注册时进行验证。如果任何注册参数无效,则会返回一个错误。你的应用必须能够处理后台任务注册失败的情况,例如,使用条件语句检查注册错误,然后使用其他参数值重试失败的注册。

 

步骤 4: 在后台任务上放置多个条件

若要添加多个条件,你的应用需要多次调用 AddCondition 方法。任务注册生效之前,必须进行这些调用。

注意  小心不要向后台任务中添加冲突的条件。

 

以下代码段在创建和注册后台任务的上下文中显示了多个条件。

var hourlyTrigger = new Windows.ApplicationModel.Background.TimeTrigger(60, false);

var recurringTaskBuilder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();

recurringTaskBuilder.Name = "Hourly background task for YourApp";
recurringTaskBuilder.TaskEntryPoint = "js\\ExampleBackgroundTask.js";
recurringTaskBuilder.SetTrigger(hourlytrigger);

//
// Begin adding conditions.
//
var userCondition = new Windows.ApplicationModel.Background.SystemCondition(Windows.ApplicationModel.Background.SystemConditionType.UserPresent);
var internetCondition = new Windows.ApplicationModel.Background.SystemCondition(Windows.ApplicationModel.Background.SystemConditionType.InternetAvailable);

taskBuilder.AddCondition(userCondition);
taskBuilder.AddCondition(internetCondition);

//
// Done adding conditions. Now we register the background task.
//
var task = recurringTaskBuilder.Register();

备注

注意  为你的后台任务选择合适的条件,以便它仅在需要时运行,不在不工作时运行。有关不同后台任务条件的描述,请参阅 SystemConditionType

相关主题

快速入门:创建和注册后台任务

如何注册后台任务

如何使用后台任务响应系统事件

如何使用维护触发器

如何在应用程序清单中声明后台任务

如何调试后台任务

后台任务指南和清单