如何使用 ServicingComplete 触发器 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
了解如何在应用更新之后使用 ServicingComplete SystemTrigger 控制后台任务注册。
你需要了解的内容
技术
先决条件
- 本主题适用于任何运行一个或多个后台任务的应用。有关编写后台任务类的详细信息可以在快速入门:创建和注册后台任务中找到。
说明
步骤 1: 创建 ServicingComplete 后台任务
在应用更新之后,后台任务注册仍有效。如果更新应用,其注册仍有效而且将被触发。应用可以将后台任务注册为让 ServicingComplete 触发器在应用更新之后获得通知,也可以将不再有效的后台任务取消注册。
为后台任务创建新的 JavaScript 文件。
下面的示例代码显示后台任务的基本起点:
// // ServicingCompleteTask.js // (function () { "use strict"; // // This function does the work of the ServicingComplete background task. // function doWork() { // // A JavaScript background task must call close when it is done. // close(); } doWork(); })();
为需要取消注册的后台任务查找注册对象。调用 Unregister 将此任务取消注册。请注意,你可以通过将 cancelTask 参数设置为 true 来强制后台任务停止运行(如果实例处于活动状态)。
// // ServicingCompleteTask.js // (function () { "use strict"; // // This function does the work of the ServicingComplete background task. // function doWork() { // // Unregister tasks that no longer exist. // var unregisterTask = "BadTaskName"; var unregTask = FindTask(unregisterTask); if (unregTask != null) { unregTask.Unregister(true); } // // A JavaScript background task must call close when it is done. // close(); } // // Check for a registration of the named background task. If one exists, // return it. // function FindTask(taskName) { var taskRegistered = false; var background = Windows.ApplicationModel.Background; var iter = background.BackgroundTaskRegistration.allTasks.first(); var hascur = iter.hasCurrent; while (hascur) { var cur = iter.current.value; if (cur.name === taskName) { return cur; } hascur = iter.moveNext(); } } doWork(); })();
根据需要注册替换任务。可以使用后台任务注册函数(如如何注册后台任务中指定的函数)简化注册操作。
// // ServicingCompleteTask.js // (function () { "use strict"; // // This function does the work of the ServicingComplete background task. // function doWork() { // // Unregister tasks that no longer exist. // var unregisterTask = "BadTaskName"; var unregTask = FindTask(unregisterTask); if (unregTask != null) { unregTask.Unregister(true); } // // Register new/replacement tasks. // var newTaskName = "New Background Task"; var newTaskEntryPoint = "js\\NewBackgroundTask.js"; var background = Windows.ApplicationModel.Background; var internetTrigger = new background.SystemTrigger( background.SystemTriggerType.internetAvailable, false); var newTask = RegisterBackgroundTask(newTaskEntryPoint, newTaskName, internetTrigger, null); // // A JavaScript background task must call close when it is done. // close(); } // // Check for a registration of the named background task. If one exists, // return it. // function FindTask(taskName) { var taskRegistered = false; var background = Windows.ApplicationModel.Background; var iter = background.BackgroundTaskRegistration.allTasks.first(); var hascur = iter.hasCurrent; while (hascur) { var cur = iter.current.value; if (cur.name === taskName) { return cur; } hascur = iter.moveNext(); } } doWork(); })();
步骤 2: 注册 ServicingComplete 后台任务
ServicingComplete 后台任务应当与其他后台任务一起注册,以便能够在应用更新之后被触发。ServicingComplete 后台任务的入口点必须在应用更新之后保持不变。
创建新的 SystemTrigger 对象:
第一个参数 triggerType 应当设置为 servicingComplete。
第二个参数 OneShot 应当设置为 false。
以下示例代码将创建一个 ServicingComplete 触发器:
var background = Windows.ApplicationModel.Background; var servicingCompleteTrigger = new background.SystemTrigger( background.SystemTriggerType.servicingComplete, false);
注意 不建议为 ServicingComplete 后台任务触发器添加条件。
调用你的后台任务注册函数以注册此任务。有关注册后台任务的详细信息,请参阅如何注册后台任务。
以下代码将注册 ServicingComplete 任务:
var entryPoint = "js\\ServicingCompleteTask.js"; var taskName = "ServicingComplete background task"; var task = RegisterBackgroundTask(entryPoint, taskName, servicingCompleteTrigger, null);
注意 在 Windows Phone 应用商店应用中,你必须在每次注册任何后台任务之前调用 RequestAccessAsync。
步骤 3: 在包清单中声明后台任务
与任何其他后台任务一样,ServicingComplete 后台任务必须列在包清单中。有关详细信息,请参阅如何在应用程序清单中声明后台任务。例如:
备注
要获取与使用后台任务调试应用更新相关的重要信息,请参阅如何调试后台任务(Windows 应用商店应用)。