Definir condições para executar uma tarefa em segundo plano

APIs importantes

Saiba como definir condições que controlam quando a sua tarefa em segundo plano será executada.

Às vezes, tarefas em tela de fundo exigem que certas condições sejam atendidas para que possam ser concluídas com sucesso. Você pode definir uma ou mais das condições especificadas por SystemConditionType ao registrar sua tarefa em segundo plano. A condição será verificada depois que o gatilho tiver sido disparado. A tarefa em segundo plano será enfileirada, mas não será executada até que todas as condições necessárias sejam atendidas.

Colocar condições em tarefas em segundo plano poupa bateria e CPU, evitando que as tarefas sejam executadas sem necessidade. Por exemplo, se a sua tarefa em segundo plano é executada com um temporizador e requer conectividade com a Internet, adicione a condição InternetAvailable a TaskBuilder antes de registrar a tarefa. Isso ajudará a evitar que a tarefa use recursos do sistema e duração da bateria desnecessariamente executando apenas a tarefa em segundo plano quando o temporizador tiver expirado e a Internet estiver disponível.

Também é possível combinar várias condições chamando AddCondition várias vezes no mesmo TaskBuilder. Tome cuidado para não adicionar condições conflitantes, como UserPresente UserNotPresent.

Criar um objeto SystemCondition

Este tópico pressupõe que você tenha uma tarefa em segundo plano já associada ao aplicativo e que o aplicativo já inclua um código que cria um objeto BackgroundTaskBuilder que se chama taskBuilder. Consulte Criar e registrar uma tarefa em segundo plano no processo ou Criar e registrar uma tarefa em segundo plano fora do processo se você precisar criar uma tarefa em segundo plano primeiro.

Este tópico se aplica a tarefas em segundo plano executadas fora do processo, bem como àquelas executadas no mesmo processo do aplicativo em primeiro plano.

Antes de adicionar a condição, crie um objeto SystemCondition para representar a condição que precisa estar em vigor para uma tarefa em segundo plano ser executada. No construtor, especifique a condição que deve ser atendida com um valor de enumeração SystemConditionType.

O código a seguir cria um objeto SystemCondition que especifica a condição InternetAvailable:

SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

Adicionar o objeto SystemCondition à sua tarefa em segundo plano

Para adicionar a condição, chame o método AddCondition no objeto BackgroundTaskBuilder e passe a ele o objeto SystemCondition.

O código a seguir usa taskBuilder para adicionar a condição InternetAvailable.

taskBuilder.AddCondition(internetCondition);
taskBuilder.AddCondition(internetCondition);
taskBuilder->AddCondition(internetCondition);

Registrar sua tarefa em segundo plano

Agora, você pode registrar sua tarefa em segundo plano no método Register, e a tarefa em segundo plano não será iniciada até a condição especificada ser atendida.

O código a seguir registra a tarefa e armazena o objeto BackgroundTaskRegistration resultante:

BackgroundTaskRegistration task = taskBuilder.Register();
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
BackgroundTaskRegistration ^ task = taskBuilder->Register();

Observação

Os parâmetros de registro de tarefas em segundo plano são validados no momento do registro. Um erro será retornado se algum parâmetro de registro for inválido. Verifique se o aplicativo trata tranquilamente cenários em que o registro de tarefas de segundo plano apresenta falha. Se, em vez disso, o aplicativo depender de ter um objeto de registro válido depois de tentar registrar uma tarefa, ele poderá travar.

Inserir várias condições na sua tarefa em segundo plano

Para adicionar várias condições, seu aplicativo faz várias chamadas ao método AddCondition . Essas chamadas devem ser feitas antes que o registro da tarefa se torne efetivo.

Observação

Tome cuidado para não adicionar condições conflitantes a uma tarefa em segundo plano.

O snippet a seguir mostra várias condições no contexto de criação e registro de uma tarefa em segundo plano.

// Set up the background task.
TimeTrigger hourlyTrigger = new TimeTrigger(60, false);

var recurringTaskBuilder = new BackgroundTaskBuilder();

recurringTaskBuilder.Name           = "Hourly background task";
recurringTaskBuilder.TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition userCondition     = new SystemCondition(SystemConditionType.UserPresent);
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.

BackgroundTaskRegistration task = recurringTaskBuilder.Register();
// Set up the background task.
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };

Windows::ApplicationModel::Background::BackgroundTaskBuilder recurringTaskBuilder;

recurringTaskBuilder.Name(L"Hourly background task");
recurringTaskBuilder.TaskEntryPoint(L"Tasks.ExampleBackgroundTaskClass");
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
Windows::ApplicationModel::Background::SystemCondition userCondition{
    Windows::ApplicationModel::Background::SystemConditionType::UserPresent };
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
// Set up the background task.
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

auto recurringTaskBuilder = ref new BackgroundTaskBuilder();

recurringTaskBuilder->Name           = "Hourly background task";
recurringTaskBuilder->TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder->SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition ^ userCondition     = ref new SystemCondition(SystemConditionType::UserPresent);
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

recurringTaskBuilder->AddCondition(userCondition);
recurringTaskBuilder->AddCondition(internetCondition);

// Done adding conditions, now register the background task.
BackgroundTaskRegistration ^ task = recurringTaskBuilder->Register();

Comentários

Observação

Escolha condições para sua tarefa em segundo plano para que ela só seja executada quando necessário e não seja executada quando não deveria. Confira SystemConditionType para ver descrições das diferentes condições de tarefas em tela de fundo.