Executar uma tarefa em segundo plano em um temporizadorRun a background task on a timer

Aprenda como usar TimeTrigger para agendar uma tarefa ocasional em segundo plano ou executar uma tarefa periódica em segundo plano.Learn how to use the TimeTrigger to schedule a one-time background task, or run a periodic background task.

Consulte Scenario4 no exemplo de ativação em Segundo plano para ver um exemplo de como implementar a tarefa em segundo plano disparada por tempo descrita neste tópico.See Scenario4 in the Background activation sample to see an example of how to implement the time triggered background task described in this topic.

Este tópico pressupõe que você tenha uma tarefa em segundo plano que precisa ser executada periodicamente ou em um momento específico.This topic assumes that you have a background task that needs to run periodically, or at a specific time. Se você ainda não tiver uma tarefa em segundo plano, há um exemplo de tarefa em segundo plano em BackgroundActivity.cs.If you don't already have a background task, there is a sample background task at BackgroundActivity.cs. Ou siga as etapas em 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.Or, follow the steps in Create and register an in-process background task or Create and register an out-of-process background task to create one.

Criar um gatilho de tempoCreate a time trigger

Crie um novo TimeTrigger.Create a new TimeTrigger. O segundo parâmetro, OneShot, especifica se a tarefa em segundo plano será executada somente uma única vez ou periodicamente.The second parameter, OneShot, specifies whether the background task will run only once or keep running periodically. Se OneShot for definido como verdadeiro, o primeiro parâmetro (FreshnessTime) especificará o número de minutos aguardados até que a tarefa em segundo plano seja agendada.If OneShot is set to true, the first parameter (FreshnessTime) specifies the number of minutes to wait before scheduling the background task. Se OneShot for definido como falso, FreshnessTime especificará a frequência com que a tarefa em segundo plano será executada.If OneShot is set to false, FreshnessTime specifies the frequency at which the background task will run.

O temporizador interno para aplicativos da Plataforma Universal do Windows (UWP) destinados à família de dispositivos móveis ou da área de trabalho executa tarefas em segundo plano em intervalos de 15 minutos.The built-in timer for Universal Windows Platform (UWP) apps that target the desktop or mobile device family runs background tasks in 15-minute intervals. (o temporizador é executada em intervalos de 15 minutos para que o sistema precisa ativar apenas uma vez a cada 15 minutos para despertar os aplicativos que solicitaram TimerTriggers, o que economiza energia).(The timer runs in 15-minute intervals so that the system only needs to wake once every 15 minutes to wake up the apps that have requested TimerTriggers--which saves power.)

  • Se FreshnessTime for definido como 15 minutos e OneShot for verdadeiro, a tarefa será agendada para ser executada uma vez começando entre 15 e 30 a partir do momento em que for registrada.If FreshnessTime is set to 15 minutes and OneShot is true, the task will be scheduled to run once starting between 15 and 30 minutes from the time it is registered. Se for definido como 25 minutos e OneShot for verdadeiro, a tarefa será agendada para ser executada uma vez começando entre 25 e 40 a partir do momento em que for registrada.If it is set to 25 minutes and OneShot is true, the task will be scheduled to run once starting between 25 and 40 minutes from the time it is registered.

  • Se FreshnessTime for definido como 15 minutos e OneShot for falso, a tarefa será agendada para ser executada a cada 15 minutos começando entre 15 e 30 a partir do momento em que for registrada.If FreshnessTime is set to 15 minutes and OneShot is false, the task will be scheduled to run every 15 minutes starting between 15 and 30 minutes from the time it is registered. Se ele estiver definido como n minutos e OneShot for falso, a tarefa será agendada para ser executada a cada n minutos começando entre n e n + 15 minutos depois que ele estiver registrado.If it is set to n minutes and OneShot is false, the task will be scheduled to run every n minutes starting between n and n + 15 minutes after it is registered.

Observação

Se FreshnessTime for definido para menos de 15 minutos, uma exceção será lançada ao tentar registrar a tarefa em segundo plano.If FreshnessTime is set to less than 15 minutes, an exception is thrown when attempting to register the background task.

Por exemplo, esse gatilho fará com que uma tarefa em segundo plano seja executada uma vez por hora.For example, this trigger will cause a background task to run once an hour.

TimeTrigger hourlyTrigger = new TimeTrigger(60, false);
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

(Opcional) Adicionar uma condição(Optional) Add a condition

Você pode criar uma condição de tarefa em segundo plano para controlar quando a tarefa será executada.You can create a background task condition to control when the task runs. Uma condição impede que a tarefa em segundo plano seja executada até a condição ser atendida.A condition prevents the background task from running until the condition is met. Para obter mais informações, consulte Definir condições para a execução de uma tarefa em segundo plano.For more information, see Set conditions for running a background task.

Neste exemplo, a condição é definida como UserPresent de maneira que, quando acionada, a tarefa seja executada somente quando o usuário estiver ativo.In this example the condition is set to UserPresent so that, once triggered, the task only runs once the user is active. Para obter uma lista das possíveis condições, consulte SystemConditionType.For a list of possible conditions, see SystemConditionType.

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

Para obter informações mais detalhadas sobre condições e tipo de gatilhos em segundo plano, consulte Oferecer suporte a tarefas em segundo plano em seu aplicativo.For more in-depth information on conditions and types of background triggers, see Support your app with background tasks.

Chamar RequestAccessAsync()Call RequestAccessAsync()

Antes de registrar a tarefa ApplicationTrigger em segundo plano, chame RequestAccessAsync para determinar o nível de atividade em segundo plano permitida para o usuário, pois ele pode ter desativado a atividade em segundo plano para o seu aplicativo.Before registering the ApplicationTrigger background task, call RequestAccessAsync to determine the level of background activity the user allows because the user may have disabled background activity for your app. Consulte Otimizar a atividade em segundo plano para obter mais informações sobre as formas como os usuários podem controlar as configurações de atividade em segundo plano.See Optimize background activity for more information about the ways users can control the settings for background activity.

var requestStatus = await Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
if (requestStatus != BackgroundAccessStatus.AlwaysAllowed)
{
    // Depending on the value of requestStatus, provide an appropriate response
    // such as notifying the user which functionality won't work as expected
}

Registrar a tarefa em segundo planoRegister the background task

Registre a tarefa em segundo plano chamando sua função de registro da tarefa em segundo plano.Register the background task by calling your background task registration function. Para obter mais informações sobre como registrar tarefas em segundo plano e ver a definição do método RegisterBackgroundTask() no código de exemplo abaixo, consulte Registrar uma tarefa em segundo plano.For more information on registering background tasks, and to see the definition of the RegisterBackgroundTask() method in the sample code below, see Register a background task.

Importante

Para tarefas em segundo plano que são executadas no mesmo processo que seu aplicativo, não defina entryPoint .For background tasks that run in the same process as your app, do not set entryPoint. Para tarefas em segundo plano que são executadas em um processo separado do seu aplicativo, defina entryPoint como o namespace '. ' e o nome da classe que contém a implementação da tarefa em segundo plano.For background tasks that run in a separate process from your app, set entryPoint to be the namespace, '.', and the name of the class that contains your background task implementation.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example hourly background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example hourly background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example hourly background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);

Os parâmetros de registro de tarefas em segundo plano são validados no momento do registro.Background task registration parameters are validated at the time of registration. Um erro será retornado se algum parâmetro de registro for inválido.An error is returned if any of the registration parameters are invalid. 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.Ensure that your app gracefully handles scenarios where background task registration fails - if instead your app depends on having a valid registration object after attempting to register a task, it may crash.

Gerenciar recursos para a tarefa em segundo planoManage resources for your background task

Use BackgroundExecutionManager.RequestAccessAsync para determinar se o usuário decidiu que a atividade em segundo plano do aplicativo deve ser limitada.Use BackgroundExecutionManager.RequestAccessAsync to determine if the user has decided that your app’s background activity should be limited. Lembre-se do uso da bateria e só execute em segundo plano quando for necessário concluir uma ação desejada pelo usuário.Be aware of your battery usage and only run in the background when it is necessary to complete an action that the user wants. Consulte Otimizar a atividade em segundo plano para obter mais informações sobre as formas como os usuários podem controlar as configurações de atividade em segundo plano.See Optimize background activity for more information about the ways users can control the settings for background activity.

  • Memória: o ajuste do uso de memória e energia do aplicativo é fundamental para garantir que o sistema operacional permita a execução da tarefa em segundo plano.Memory: Tuning your app's memory and energy use is key to ensuring that the operating system will allow your background task to run. Use as APIs de gerenciamento de memória para saber quanta memória a tarefa em segundo plano está usando.Use the Memory Management APIs to see how much memory your background task is using. Quanto mais memória a tarefa em segundo plano usar, mais difícil fica para o sistema operacional manter o aplicativo em execução quando outro aplicativo está em primeiro plano.The more memory your background task uses, the harder it is for the OS to keep it running when another app is in the foreground. O usuário acaba ficando no controle de toda a atividade em segundo plano que o aplicativo pode realizar e tem visibilidade do impacto que o aplicativo tem sobre o uso da bateria.The user is ultimately in control of all background activity that your app can perform and has visibility on the impact your app has on battery use.
  • Tempo da CPU: as tarefas em segundo plano são limitadas pela quantidade de tempo de uso que elas obtêm com base no tipo de gatilho.CPU time: Background tasks are limited by the amount of wall-clock usage time they get based on trigger type.

Consulte Dar suporte a seu aplicativo com tarefas em segundo plano para conhecer as restrições de recursos que se aplicam às tarefas em segundo plano.See Support your app with background tasks for the resource constraints applied to background tasks.

ComentáriosRemarks

A partir do Windows 10, não é necessário para o usuário adicionar o aplicativo à tela de bloqueio para utilizar tarefas em segundo plano.Starting with Windows 10, it is no longer necessary for the user to add your app to the lock screen in order to utilize background tasks.

Uma tarefa em segundo plano será executada somente usando um TimeTrigger se você chamar RequestAccessAsync primeiro.A background task will only run using a TimeTrigger if you have called RequestAccessAsync first.