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.
Tópicos relacionados
- Criar e registrar uma tarefa em segundo plano fora do processo.
- Criar e registrar uma tarefa em segundo plano em processo
- Declarar tarefas em segundo plano no manifesto do app
- Tratar uma tarefa em segundo plano cancelada
- Monitorar o progresso e a conclusão de tarefas em segundo plano
- Registrar uma tarefa em segundo plano
- Responder a eventos do sistema com tarefas em segundo plano
- Atualizar um bloco dinâmico de uma tarefa em segundo plano
- Usar um gatilho de manutenção
- Executar uma tarefa em segundo plano em um temporizador
- Diretrizes para tarefas em segundo plano
- Depurar uma tarefa em segundo plano
- Como disparar eventos de suspensão, retomada e segundo plano em aplicativos UWP (durante a depuração)
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de