Как зарегистрировать фоновую задачу (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Сведения о создании функции, которую можно многократно использовать для надежной регистрации большинства фоновых задач. Данный раздел содержит краткий обзор служебной функции, которая регистрирует фоновые задачи. Прежде чем несколько раз зарегистрировать задачу, эта служебная функция проверяет наличие существующих регистраций, чтобы избежать проблем, связанных с многократными регистрациями. Она может также применять условие системы к фоновой задаче. Этот обзор включает полный рабочий пример данной служебной функции.

Примечание  

Для универсальных приложений Windows Phone необходимо вызывать метод RequestAccessAsync перед регистрацией любой фоновой задачи. В Windows такой вызов требуется только для набора фоновых задач, для выполнения которых приложение должно находиться на экране блокировки, однако в Windows Phone вы должны один раз вызывать этот метод перед регистрацией любой фоновой задачи.

Чтобы приложение Windows Phone продолжало правильно работать после выпуска обновления, необходимо вызвать RemoveAccess, а затем RequestAccessAsync при запуске приложения после обновления. Дополнительная информация: Руководство по фоновым задачам (HTML).

Что необходимо знать

Технологии

Необходимые условия

  • Предполагается, что вы уже создали фоновую задачу, которую нужно зарегистрировать (этот раздел не затрагивает вопросы написания фоновой задачи).

Инструкции

Этап 1: Определение подписи функции

Данная функция принимает точку входа задачи, имя задачи, предварительно построенный триггер фоновой задачи и (необязательно) условие SystemCondition для фоновой задачи. Обратите внимание, что эта функция возвращает объект BackgroundTaskRegistration.

function RegisterBackgroundTask(taskEntryPoint, 
                                taskName,
                                trigger,
                                condition)
{
    
    // We’ll add code to this function in subsequent steps.

}

Этап 2: Проверка наличия существующих регистраций

Проверьте, не зарегистрирована ли уже задача. Это важно проверить, потому что при многократной регистрации задачи она будет выполняться несколько раз при каждом срабатывании триггера, что может привести к избыточному потреблению ресурсов ЦП и непредсказуемому поведению.

Для проверки наличия существующих регистраций можно запросить свойство BackgroundTaskRegistration.AllTasks и выполнить итерацию по результату. Проверьте имя каждого экземпляра: если оно совпадает с именем регистрируемой задачи, следует прервать цикл и установить переменную флага, чтобы вашему коду удалось выбрать другой путь в следующем шаге.

Примечание  Используйте имена фоновых задач, которые уникальны для вашего приложения. Убедитесь, что каждая фоновая задача имеет уникальное имя.

 

Следующий код регистрирует фоновую задачу с использованием триггера SystemTrigger, который мы создали в последнем шаге:

function RegisterBackgroundTask(taskEntryPoint, 
                                taskName,
                                trigger,
                                condition)
{
    //
    // Check for existing registrations of this background task.
    //

    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) {
            taskRegistered = true;
            break;
        }
        
        hascur = iter.moveNext();
    }


    // We’ll register the task in the next step.

}

Этап 3: Регистрация фоновой задачи (или возврат существующей регистрации)

Проверьте, не найдена ли задача в списке существующих регистраций фоновых задач. Если да, верните этот экземпляр задачи.

Затем зарегистрируйте задачу с использованием нового объекта BackgroundTaskBuilder. Данный код должен проверить, имеет ли параметр условия значение NULL, и, если это не так, то он должен добавить условие для объекта регистрации. Верните объект BackgroundTaskRegistration, возвращенный функцией BackgroundTaskBuilder.Register.

Примечание  

Начиная с Windows 8.1 параметры регистрации фоновых задач проверяются во время регистрации. Если какие-либо из параметров регистрации недопустимы, возвращается ошибка. Ваше приложение должно обрабатывать ситуации, в которых регистрация фоновой задачи завершается ошибкой. Например, можно проверять ошибки регистрации в условном операторе, а затем в случае ошибки повторять регистрацию с другими значениями параметров.

 

В следующем примере выполняется либо возврат существующей задачи, либо добавление кода, регистрирующего фоновую задачу (включая дополнительное условие системы, если оно есть):

function RegisterBackgroundTask(taskEntryPoint, 
                                taskName,
                                trigger,
                                condition)
{
    //
    // Check for existing registrations of this background task.
    //

    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) {
            taskRegistered = true;
            break;
        }
        
        hascur = iter.moveNext();
    }


    //
    // If the task is already registered, return the registration object.
    //

    if (taskRegistered == true) {
        
        return iter.current;
    }


    //
    // Register the background task.
    //
    var builder = new background.BackgroundTaskBuilder();

    builder.Name = taskName;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.setTrigger(trigger);

    if (condition != null) {

        builder.addCondition(condition);
    }

    var task = builder.register();

    return task;
}

Полная служебная функция регистрации фоновой задачи

Этот пример демонстрирует полную функцию регистрации фоновой задачи. Эту функцию можно использовать для регистрации большинства фоновых задач, за исключением сетевых.

//
// Register a background task with the specified taskEntryPoint, name, trigger,
// and condition (optional).
//
// taskEntryPoint: Task entry point for the background task.
// taskName: A name for the background task.
// trigger: The trigger for the background task.
// condition: Optional parameter. A conditional event that must be true for the task to fire.
//
function RegisterBackgroundTask(taskEntryPoint, 
                                taskName,
                                trigger,
                                condition)
{
    //
    // Check for existing registrations of this background task.
    //

    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) {
            taskRegistered = true;
            break;
        }
        
        hascur = iter.moveNext();
    }


    //
    // If the task is already registered, return the registration object.
    //

    if (taskRegistered == true) {
        
        return iter.current;
    }


    //
    // Register the background task.
    //
    var builder = new background.BackgroundTaskBuilder();

    builder.Name = taskName;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.setTrigger(trigger);

    if (condition != null) {

        builder.addCondition(condition);
    }

    var task = builder.register();

    return task;
}

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

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

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

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

Использование триггеров обслуживания

Обработка отмененной фоновой задачи

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

Запуск фоновой задачи по таймеру

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

Активация событий приостановки, возобновления и перевода в фоновый режим приложений Магазина Windows (во время отладки)