如何在计时器上运行后台任务 (HTML)

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

了解如何计划一次性后台任务,或运行与 Windows 应用商店应用关联的周期性后台任务。 如果用户将你的应用置于锁屏上,则应用可以注册在 Windows 上每隔最长 15 分钟运行一次并在 Windows Phone 上每隔最长 30 分钟运行一次的后台任务。例如,后台任务可用来提供周期性磁贴或锁屏提醒更新。

你需要了解的内容

技术

先决条件

  • 此示例假定你的后台任务需要周期性运行,或在特定时间运行,以支持你的应用。在 Windows 上,如果你已请求该应用通过调用 RequestAccessAsync 来放置到锁屏上,且用户接受了该提示,则后台任务仅可使用 TimeTrigger 运行。在 Windows Phone 上,你必须调用 RequestAccessAsync,但不存在用户提示。有关详细信息,请参阅在锁屏上显示磁贴
  • 本主题假定你已创建一个后台任务类,其中包含用作后台任务入口点的 Run 方法。若要快速构建后台任务,请阅读快速入门:创建和注册后台任务。有关条件和触发器的详细信息,请参阅使用后台任务支持应用

说明

步骤 1: 创建时间触发器

创建新的 TimeTrigger。第二个参数 OneShot 指定后台任务是运行一次还是保持周期性运行。如果 OneShot 被设置为 true,则第一个参数 (FreshnessTime) 会指定在计划后台任务之前需等待的分钟数。如果 OneShot 被设置为 false,则 FreshnessTime 会指定后台任务的运行频率。

Windows 8 具有一个内置的计时器,该计时器每隔 15 分钟就会运行一次后台任务。请注意,在 Windows Phone 上,间隔为 30 分钟。

  • 如果 FreshnessTime 设置为 15 分钟并且 OneShot 为 true,则任务将从其注册之时起 0 至 15 分钟内运行一次该任务。

  • 如果 FreshnessTime 设置为 15 分钟并且 OneShot 为 false,则任务将从其注册之时起 0 至 15 分钟内每隔 15 分钟运行一次该任务。

注意  如果 FreshnessTime 设置为少于 15 分钟,则在尝试注册后台任务时将引发异常。

 

例如,该触发器将导致后台任务每小时运行一次:

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

步骤 2: (可选)添加条件

如果需要,添加一个后台任务条件以控制任务何时运行。防止后台任务在未满足条件之前运行的条件 - 有关详细信息,请参阅 如何设置运行后台任务的条件

在此示例中,条件设置为 UserPresent 以便触发任务之后,在用户处于活动状态时才运行一次该任务。有关可能条件的列表,请参阅 SystemConditionType

以下代码向后台任务中添加一个条件:

var userCondition = new Windows.ApplicationModel.Background.SystemCondition(Windows.ApplicationModel.Background.SystemConditionType.UserPresent);

步骤 3: 请求锁屏访问

尝试注册 TimeTrigger 后台任务之前,通过调用 RequestAccessAsync 从用户请求添加到锁屏的权限。

在 Windows 上,以下代码向用户提供一个对话框,该对话框请求将应用添加到锁屏。在电话上,该操作仅要求系统允许你的应用运行后台任务:

Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();

注意  一个应用仅允许请求锁屏访问一次。用户只能从两个选项中选择一个,所以他们的首选项已确定。对 RequestAccessAsync 的进一步调用将忽略。

 

步骤 4: 注册后台任务

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

下面的代码将注册后台任务:

var entryPoint = “js\\ExampleBackgroundTask.js”;
var taskName = “Example hourly background task”;

var task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);

注意  

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

 

备注

注意  在 Windows 上,如果用户已将应用添加到锁屏(或者当应用请求访问时提供权限),则后台任务将仅使用时间触发器注册 - 请参阅在锁屏上显示磁贴。可以将后台任务与不需要应用位于锁屏上的触发器关联。有关这些类型的后台任务触发器的指南,请参阅使用后台任务支持应用

 

相关主题

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

如何注册后台任务

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

如何调试后台任务

后台任务指南和清单