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


Создание и регистрация фоновой задачи, выполняемой внутри процесса

Важные API

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

Фоновые задачи внутри процесса проще реализовать, чем внепроцессные фоновые задачи. Однако они менее устойчивы. Если код, запущенный в фоновом режиме, завершает работу приложения. Кроме того, обратите внимание, что DeviceUseTrigger, DeviceServicingTrigger и IoTStartupTask нельзя использовать с моделью в процессе. Активация фоновой задачи VoIP в приложении также невозможна. Эти триггеры и задачи по-прежнему поддерживаются с помощью модели фоновой задачи вне процесса.

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

Основы

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

На высоком уровне вы будете обрабатывать событие EnteredBackground для запуска кода, который будет выполняться во время работы приложения в фоновом режиме, и обработаете ОставитьBackground, чтобы узнать, когда приложение переместится на передний план.

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

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

var builder = new BackgroundTaskBuilder();
builder.Name = "My Background Trigger";
builder.SetTrigger(new TimeTrigger(15, true));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();

Примечание.

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

Для фоновых действий в процессе не задано TaskEntryPoint. значение "Оставить пустым" включается точка входа по умолчанию, новый защищенный метод объекта Application с именем OnBackgroundActivated().

После регистрации триггера он будет запущен на основе типа триггера, установленного в методе SetTrigger . В приведенном выше примере используется TimeTrigger , который будет стрелять пятнадцать минут с момента регистрации.

Добавление условия для управления выполнением задачи (необязательно)

Вы можете добавить условие для управления, когда задача будет выполняться после события триггера. Например, если вы не хотите, чтобы задача выполнялось до тех пор, пока пользователь не будет присутствовать, используйте условие UserPresent. Список возможных условий см. в разделе SystemConditionType.

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

builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));

Поместите код фонового действия в OnBackgroundActivated()

Поместите код фонового действия в OnBackgroundActivated , чтобы реагировать на фоновый триггер при срабатывании. OnBackgroundActivated можно рассматривать так же, как iBackgroundTask.Run. Метод имеет параметр BackgroundActivatedEventArgs , который содержит все, что предоставляет метод Run . Например, в App.xaml.cs:

using Windows.ApplicationModel.Background;

...

sealed partial class App : Application
{
  ...

  protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
  {
      base.OnBackgroundActivated(args);
      IBackgroundTaskInstance taskInstance = args.TaskInstance;
      DoYourBackgroundWork(taskInstance);  
  }
}

Более подробный пример OnBackgroundActivated см. в разделе "Преобразование службы приложений для запуска в том же процессе, что и ведущее приложение".

Обработка хода выполнения и завершения фоновой задачи

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

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

Фоновые задачи в процессе отменяются так же, как и фоновые задачи вне процесса (см . раздел "Обработка отмененной фоновой задачи"). Помните, что обработчик событий BackgroundActivated должен выйти до завершения отмены или завершить весь процесс. Если приложение переднего плана неожиданно закрывается при отмене фоновой задачи, убедитесь, что обработчик вышел до отмены.

Манифест

В отличие от фоновых задач вне процесса, не требуется добавлять фоновые сведения о задаче в манифест пакета для выполнения фоновых задач внутри процесса.

Сводка и дальнейшие действия

Теперь вы должны понять основы написания фоновой задачи в процессе.

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

Подробные инструкции по фоновым задачам

Руководство по фоновой задаче

Справочник по API фоновой задачи