Compartilhar via


Disparar uma tarefa em segundo plano no seu aplicativo

Saiba como usar o ApplicationTrigger para ativar uma tarefa em segundo plano de dentro de seu aplicativo.

Para obter um exemplo de como criar um gatilho de aplicativo, consulte este exemplo.

Este tópico pressupõe que você tenha uma tarefa em segundo plano que deseja ativar em seu aplicativo. Se você ainda não tiver uma tarefa em segundo plano, há um exemplo de tarefa em segundo plano em BackgroundActivity.cs. Ou siga as etapas em Criar e registrar uma tarefa em segundo plano fora do processo para criar uma.

Por que usar um gatilho de aplicativo

Use um ApplicationTrigger para executar código em um processo separado do aplicativo em primeiro plano. Um ApplicationTrigger será apropriado se o aplicativo tiver trabalho que precisa ser feito em segundo plano, mesmo que o usuário feche o aplicativo em primeiro plano. Se o trabalho em segundo plano for interrompido quando o aplicativo for fechado ou estiver vinculado ao estado do processo em primeiro plano, a Execução Estendida deverá ser usada.

Criar um gatilho de aplicativo

Crie um novo ApplicationTrigger. Você pode armazená-lo em um campo, como é feito no trecho abaixo. Isso é por conveniência, para que não tenhamos que criar uma nova instância mais tarde, quando quisermos sinalizar o gatilho. Mas você pode usar qualquer instância de ApplicationTrigger para sinalizar o gatilho.

// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();

(Opcional) Adicionar uma condição

Você pode criar uma condição de tarefa em segundo plano para controlar quando a tarefa é executada. Uma condição impede que a tarefa em segundo plano seja executada até que a condição seja atendida. Para obter mais informações, consulte Definir condições para executar uma tarefa em segundo plano.

Neste exemplo, a condição é definida como InternetAvailable para que, uma vez disparada, a tarefa seja executada somente quando o acesso à Internet estiver disponível. Para obter uma lista de condições possíveis, consulte SystemConditionType.

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

Para obter informações mais detalhadas sobre condições e tipos de gatilhos em segundo plano, consulte Dar suporte ao seu aplicativo com tarefas em segundo plano.

Chamar RequestAccessAsync()

Antes de registrar a tarefa em segundo plano ApplicationTrigger , chame RequestAccessAsync para determinar o nível de atividade em segundo plano que o usuário permite porque o usuário pode ter desabilitado a atividade em segundo plano para seu aplicativo. Consulte Otimizar a atividade em segundo plano para obter mais informações sobre como os usuários podem controlar as configurações da atividade em segundo plano.

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 plano

Registre a tarefa em segundo plano chamando sua função de registro de tarefa em segundo plano. 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.

Se você estiver pensando em usar um Gatilho de Aplicativo para estender o tempo de vida do processo em primeiro plano, considere usar a Execução Estendida . O Gatilho de Aplicativo foi projetado para criar um processo hospedado separadamente para trabalhar. O snippet de código a seguir registra um gatilho em segundo plano fora do processo.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example application trigger";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example application trigger";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);

Os parâmetros de registro de tarefa em segundo plano são validados no momento do registro. Um erro será retornado se qualquer um dos parâmetros de registro for inválido. Certifique-se de que seu aplicativo lide normalmente com cenários em que o registro de tarefa em segundo plano falha – se, em vez disso, seu aplicativo depender de ter um objeto de registro válido depois de tentar registrar uma tarefa, ele poderá falhar.

Disparar a tarefa em segundo plano

Antes de disparar a tarefa em segundo plano, use BackgroundTaskRegistration para verificar se a tarefa em segundo plano está registrada. Um bom momento para verificar se todas as suas tarefas em segundo plano estão registradas é durante a inicialização do aplicativo.

Dispare a tarefa em segundo plano chamando ApplicationTrigger.RequestAsync. Qualquer instância de ApplicationTrigger servirá.

Observe que ApplicationTrigger.RequestAsync não pode ser chamado da própria tarefa em segundo plano ou quando o aplicativo está no estado de execução em segundo plano (consulte Ciclo de vida do aplicativo para obter mais informações sobre os estados do aplicativo). Ele poderá retornar DisabledByPolicy se o usuário tiver definido políticas de energia ou privacidade que impeçam o aplicativo de executar atividades em segundo plano. Além disso, apenas um AppTrigger pode ser executado por vez. Se você tentar executar um AppTrigger enquanto outro já estiver em execução, a função retornará CurrentlyRunning.

var result = await _AppTrigger.RequestAsync();

Gerenciar recursos para sua tarefa em segundo plano

Use BackgroundExecutionManager.RequestAccessAsync para determinar se o usuário decidiu que a atividade em segundo plano do aplicativo deve ser limitada. Esteja ciente do uso da bateria e só execute em segundo plano quando for necessário concluir uma ação que o usuário deseja. Consulte Otimizar a atividade em segundo plano para obter mais informações sobre como os usuários podem controlar as configurações da atividade em segundo plano.

  • Memória: ajustar o uso de memória e energia do aplicativo é fundamental para garantir que o sistema operacional permita que sua tarefa em segundo plano seja executada. Use as APIs de Gerenciamento de Memória para ver quanta memória sua tarefa em segundo plano está usando. Quanto mais memória sua tarefa em segundo plano usar, mais difícil será para o sistema operacional mantê-la em execução quando outro aplicativo estiver em primeiro plano. Em última análise, o usuário está no controle de todas as atividades em segundo plano que seu aplicativo pode executar e tem visibilidade sobre o impacto que seu aplicativo tem no uso da bateria.
  • Tempo de CPU: as tarefas em segundo plano são limitadas pela quantidade de tempo de uso do relógio de parede que elas obtêm com base no tipo de gatilho. As tarefas em segundo plano disparadas pelo gatilho do aplicativo são limitadas a cerca de 10 minutos.

Consulte Dar suporte ao seu aplicativo com tarefas em segundo plano para obter as restrições de recursos aplicadas a tarefas em segundo plano.

Comentários

A partir do Windows 10, não é mais necessário que o usuário adicione seu aplicativo à tela de bloqueio para utilizar tarefas em segundo plano.

Uma tarefa em segundo plano só será executada usando um ApplicationTrigger se você tiver chamado RequestAccessAsync primeiro.