Поделиться через


Как использовать триггер 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).

Связанные разделы

Краткое руководство: создание и регистрация фоновой задачи

Регистрация фоновой задачи

Реагирование на системные события с помощью фоновых задач

Задание условий для выполнения фоновой задачи

Объявление фоновых задач в манифесте приложения

Отладка фоновой задачи

Руководство и контрольный список для фоновых задач