Регистрация фоновых задач группы
Важные API
Класс BackgroundTaskRegistrationGroup
Фоновые задачи теперь можно зарегистрировать в группе, которую можно рассматривать как логическое пространство имен. Эта изоляция помогает гарантировать, что разные компоненты приложения или разные библиотеки не вмешиваются в регистрацию фоновых задач друг друга.
Когда приложение и платформа (или библиотека) использует регистрацию фоновой задачи с тем же именем, приложение может случайно удалить регистрацию фоновых задач платформы. Авторы приложений также могут случайно удалить регистрацию фоновых задач платформы и библиотеки, так как они могут отменить регистрацию всех зарегистрированных фоновых задач с помощью BackgroundTaskRegistration.AllTasks. С помощью групп можно изолировать регистрации фоновых задач, чтобы это не произошло.
Функции групп
- Группы можно однозначно определить с помощью GUID. Они также могут иметь связанную строку понятного имени, которая проще читать во время отладки.
- В группе можно зарегистрировать несколько фоновых задач.
- Фоновые задачи, зарегистрированные в группе, не будут отображаться в BackgroundTaskRegistration.AllTasks. Таким образом, приложения, которые в настоящее время используют BackgroundTaskRegistration.AllTasks для отмены регистрации своих задач, непреднамеренно отменяют регистрацию фоновых задач, зарегистрированных в группе. См . статью Отмена регистрации фоновых задач в группе ниже, чтобы узнать, как отменить регистрацию всех фоновых триггеров, зарегистрированных в группе.
- Каждая регистрация фоновых задач будет иметь свойство Group, чтобы определить, с какой группой она связана.
- Регистрация фоновых задач в процессе в группе приведет к тому, что активация будет проходить через событие BackgroundTaskRegistrationGroup.BackgroundActivated вместо Application.OnBackgroundActivated.
Регистрация фоновой задачи в группе
Ниже показано, как зарегистрировать фоновую задачу (активируемую изменением часового пояса в этом примере) в составе группы.
private const string groupFriendlyName = "myGroup";
private const string groupId = "3F2504E0-4F89-41D3-9A0C-0305E82C3301";
private const string myTaskName = "My Background Trigger";
public static void RegisterBackgroundTaskInGroup()
{
BackgroundTaskRegistrationGroup group = BackgroundTaskRegistration.GetTaskGroup(groupId);
bool isTaskRegistered = false;
// See if this task already belongs to a group
if (group != null)
{
foreach (var taskKeyValue in group.AllTasks)
{
if (taskKeyValue.Value.Name == myTaskName)
{
isTaskRegistered = true;
break;
}
}
}
// If the background task is not in a group, register it
if (!isTaskRegistered)
{
if (group == null)
{
group = new BackgroundTaskRegistrationGroup(groupId, groupFriendlyName);
}
var builder = new BackgroundTaskBuilder();
builder.Name = myTaskName;
builder.TaskGroup = group; // we specify the group, here
builder.SetTrigger(new SystemTrigger(SystemTriggerType.TimeZoneChange, false));
// Because builder.TaskEntryPoint is not specified, OnBackgroundActivated() will be raised when the background task is triggered
BackgroundTaskRegistration task = builder.Register();
}
}
Отмена регистрации фоновых задач в группе
Ниже показано, как отменить регистрацию фоновых задач, зарегистрированных как часть группы. Так как фоновые задачи, зарегистрированные в группе, не отображаются в BackgroundTaskRegistration.AllTasks, необходимо выполнить итерацию по группам, найти фоновые задачи, зарегистрированные в каждой группе, и отменить регистрацию.
private static void UnRegisterAllTasks()
{
// Unregister tasks that are part of a group
foreach (var groupKeyValue in BackgroundTaskRegistration.AllTaskGroups)
{
foreach (var groupedTask in groupKeyValue.Value.AllTasks)
{
groupedTask.Value.Unregister(true); // passing true to cancel currently running instances of this background task
}
}
// Unregister tasks that aren't part of a group
foreach(var taskKeyValue in BackgroundTaskRegistration.AllTasks)
{
taskKeyValue.Value.Unregister(true); // passing true to cancel currently running instances of this background task
}
}
Регистрация постоянных событий
При использовании групп регистрации фоновых задач с фоновыми задачами фоновые задачи фоновые активации направляются к событию группы, а не к объекту Application или CoreApplication. Это позволяет нескольким компонентам в приложении обрабатывать активацию, а не размещать все пути кода активации в объекте Application. Ниже показано, как зарегистрироваться для фонового активированного события группы. Сначала проверьте , зарегистрирована ли группа BackgroundTaskRegistration.GetTaskGroup . Если это не так, создайте новую группу с идентификатором и понятным именем. Затем зарегистрируйте обработчик событий в событии BackgroundActivated в группе.
void RegisterPersistentEvent()
{
var group = BackgroundTaskRegistration.GetTaskGroup(groupId);
if (group == null)
{
group = new BackgroundTaskRegistrationGroup(groupId, groupFriendlyName);
}
group.BackgroundActivated += MyEventHandler;
}