如何使用 ServicingComplete 触发器 (HTML)

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

了解如何在应用更新之后使用 ServicingComplete SystemTrigger 控制后台任务注册。

你需要了解的内容

技术

先决条件

说明

步骤 1: 创建 ServicingComplete 后台任务

在应用更新之后,后台任务注册仍有效。如果更新应用,其注册仍有效而且将被触发。应用可以将后台任务注册为让 ServicingComplete 触发器在应用更新之后获得通知,也可以将不再有效的后台任务取消注册。

  1. 为后台任务创建新的 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();
    
    })();
    
  2. 为需要取消注册的后台任务查找注册对象。调用 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();
    
    })();
    
  3. 根据需要注册替换任务。可以使用后台任务注册函数(如如何注册后台任务中指定的函数)简化注册操作。

    //
    // 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 后台任务的入口点必须在应用更新之后保持不变。

  1. 创建新的 SystemTrigger 对象:

    • 第一个参数 triggerType 应当设置为 servicingComplete

    • 第二个参数 OneShot 应当设置为 false

    以下示例代码将创建一个 ServicingComplete 触发器:

    
    var background = Windows.ApplicationModel.Background;
    
    var servicingCompleteTrigger = new background.SystemTrigger(
                            background.SystemTriggerType.servicingComplete, false);
    

    注意  不建议为 ServicingComplete 后台任务触发器添加条件。

     

  2. 调用你的后台任务注册函数以注册此任务。有关注册后台任务的详细信息,请参阅如何注册后台任务

    以下代码将注册 ServicingComplete 任务:

    var entryPoint = "js\\ServicingCompleteTask.js";
    var taskName = "ServicingComplete background task";
    
    var task = RegisterBackgroundTask(entryPoint,
                                      taskName, 
                                      servicingCompleteTrigger, 
                                      null);
    

    注意  在 Windows Phone 应用商店应用中,你必须在每次注册任何后台任务之前调用 RequestAccessAsync

步骤 3: 在包清单中声明后台任务

与任何其他后台任务一样,ServicingComplete 后台任务必须列在包清单中。有关详细信息,请参阅如何在应用程序清单中声明后台任务。例如:

应用清单中声明的 ServicingCompleteTask

备注

要获取与使用后台任务调试应用更新相关的重要信息,请参阅如何调试后台任务(Windows 应用商店应用)

相关主题

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

如何注册后台任务

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

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

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

如何调试后台任务

后台任务指南和清单