Compartilhar via


Registro de tarefas em segundo plano do grupo

APIs importantes

classe BackgroundTaskRegistrationGroup

As tarefas em segundo plano agora podem ser registradas em um grupo, que você pode considerar como um namespace lógico. Esse isolamento ajuda a garantir que diferentes componentes de um aplicativo ou bibliotecas diferentes não interfiram no registro de tarefas em segundo plano um do outro.

Quando um aplicativo e a estrutura (ou biblioteca) ele usa registra uma tarefa em segundo plano com o mesmo nome, o aplicativo pode remover inadvertidamente os registros de tarefa em segundo plano da estrutura. Os autores de aplicativos também podem remover acidentalmente registros de tarefas em segundo plano de estrutura e biblioteca porque podem cancelar o registro de todas as tarefas em segundo plano registradas usando BackgroundTaskRegistration.AllTasks. Com grupos, você pode isolar seus registros de tarefa em segundo plano para que isso não aconteça.

Características de grupos

  • Os grupos podem ser identificados exclusivamente por um GUID. Eles também podem ter uma cadeia de caracteres de nome amigável associada que é mais fácil de ler durante a depuração.
  • Várias tarefas em segundo plano podem ser registradas em um grupo.
  • As tarefas em segundo plano registradas em um grupo não aparecerão em BackgroundTaskRegistration.AllTasks. Assim, os aplicativos que atualmente usam BackgroundTaskRegistration.AllTasks para cancelar o registro de suas tarefas não cancelarão, inadvertidamente, o registro de tarefas em segundo plano que foram registradas em um grupo. Consulte Cancelar o registro de tarefas em segundo plano em um grupo abaixo para ver como cancelar o registro de todos os gatilhos em segundo plano que foram registrados como parte de um grupo.
  • Cada registro de tarefa em segundo plano terá uma propriedade grupo para determinar com qual grupo a tarefa está associada.
  • Registrar tarefas em segundo plano In-Process em um grupo fará com que a ativação passe pelo Evento BackgroundTaskRegistrationGroup.BackgroundActivated em vez de Application.OnBackgroundActivated.

Registrar uma tarefa em segundo plano em um grupo

O exemplo a seguir mostra como registrar uma tarefa em segundo plano (disparada por uma alteração de fuso horário, neste exemplo) como parte de um grupo.

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();
   }
}

Cancelar o registro de tarefas em segundo plano em um grupo

O exemplo a seguir mostra como cancelar o registro de tarefas em segundo plano que foram registradas como parte de um grupo. Como as tarefas em segundo plano registradas em um grupo não aparecem no BackgroundTaskRegistration.AllTasks, você deve iterar por meio dos grupos, encontrar as tarefas em segundo plano registradas em cada grupo e cancelá-las.

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
    }
}

Registrar eventos persistentes

Ao usar Grupos de Registro de Tarefas em Segundo Plano com tarefas em segundo plano em processo, as ativações em segundo plano são direcionadas ao evento do grupo, em vez de ao do objeto Application ou CoreApplication. Isso permite que vários componentes em seu aplicativo manipulem a ativação em vez de colocar todos os caminhos de código de ativação no objeto Application. O exemplo a seguir mostra como registrar-se no evento do grupo ativado em segundo plano. Primeiro, verifique BackgroundTaskRegistration.GetTaskGroup para determinar se o grupo já foi registrado. Caso contrário, crie um novo grupo com sua ID e o nome amigável. Em seguida, registre um manipulador de eventos para o evento BackgroundActivated no grupo especificado.

void RegisterPersistentEvent()
{
    var group = BackgroundTaskRegistration.GetTaskGroup(groupId);
    if (group == null)
    {
        group = new BackgroundTaskRegistrationGroup(groupId, groupFriendlyName);
    }

    group.BackgroundActivated += MyEventHandler;
}