如何设置后台任务的运行条件 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
了解如何为运行后台任务设置条件,帮助其仅在合适时运行。 有时,除了触发该任务的事件之外,后台任务还需要满足某些条件以便后台任务可以继续。你可以在注册后台任务时指定由 SystemConditionType 指定的一个或多个条件。引发触发器之后将检查条件;后台任务将进入队列,但在满足所有所需条件之前不会运行。
对后台任务设置条件可阻止任务不必要地运行,从而节省电池电量和 CPU 运行时。例如,如果你的后台任务在计时器上运行并要求 Internet 连接,请在注册该任务之前将 InternetAvailable 条件添加到 TaskBuilder。通过在计时器时间过去以及 Internet 可用时让任务运行,有助于防止任务使用不必要的系统资源和电池寿命。
你需要了解的内容
技术
先决条件
- 本主题假定你的后台任务已与你的应用关联,且你的应用已包含用于创建名为 taskBuilder 的 BackgroundTaskBuilder 对象的代码。
说明
步骤 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。