Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 do aplicativo. Se você ainda não tiver uma tarefa em segundo plano, haverá uma tarefa em segundo plano de exemplo 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 o código em um processo separado do aplicativo em primeiro plano. Um ApplicationTrigger é apropriado se o aplicativo tiver um 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 deva ser interrompido quando o aplicativo for fechado ou deva estar vinculado ao estado do processo em primeiro plano, o de Execução Estendida deverá ser usado.
Criar um gatilho de aplicativo
Criar um novo ApplicationTrigger. Você pode armazená-lo em um campo, como é feito no snippet abaixo. Isso é por conveniência para que não precisemos criar uma nova instância mais tarde quando quisermos sinalizar o gatilho. Mas você pode usar qualquer instância 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 apenas quando o acesso à Internet estiver disponível. Para obter uma lista de possíveis condições, 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 aplicativo com tarefas em segundo plano.
Chamar RequestAccessAsync()
Antes de registrar a tarefa ApplicationTrigger em segundo plano, chame RequestAccessAsync para determinar o nível de atividade em segundo plano que o usuário permite, pois 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
Se você estiver considerando usar um Gatilho de Aplicativo para estender o tempo de vida do seu processo em primeiro plano, considere usar Execução Estendida. O Gatilho de Aplicativo foi projetado para criar um processo hospedado de forma independente, no qual o trabalho pode ser realizado. 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 algum dos parâmetros de registro for inválido. Verifique se seu aplicativo manipula normalmente cenários em que o registro de tarefas 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 tarefas em segundo plano estão registradas é durante a inicialização do aplicativo.
Inicie a tarefa em segundo plano chamando ApplicationTrigger.RequestAsync. Qualquer instância ApplicationTrigger fará.
Note 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 de aplicativos 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 realizar 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. Lembre-se do uso da bateria e só seja executado em segundo plano quando for necessário concluir uma ação desejada pelo usuário. 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 a memória e o uso de 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 usa, mais difícil é para o sistema operacional mantê-la em execução quando outro aplicativo está em primeiro plano. O usuário está, em última análise, no controle de todas as atividades em segundo plano que seu aplicativo pode executar e tem visibilidade do 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 recebem com base no tipo de gatilho. As tarefas em segundo plano disparadas pelo gatilho de aplicativo são limitadas a cerca de 10 minutos.
Consulte Suporte seu aplicativo com tarefas em segundo plano para as restrições de recursos aplicadas a essas tarefas.
Observações
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.
Tópicos relacionados
- Diretrizes para tarefas em segundo plano
- Exemplo de código de tarefa em segundo plano
- Criar e registrar uma tarefa em segundo plano em um processo em execução.
- Criar e registrar uma tarefa em segundo plano fora do processo
- Depurar uma tarefa em segundo plano
- Declarar tarefas em segundo plano no manifesto do aplicativo
- Memória livre quando seu aplicativo se move para o plano de fundo
- Gerenciar uma tarefa em segundo plano cancelada
- Como acionar eventos de suspensão, retomada e segundo plano em aplicativos UWP (durante o processo de depuração)
- Monitorar o progresso e a conclusão da tarefa em segundo plano
- Adiar a suspensão do aplicativo com execução prolongada
- Registrar uma tarefa em segundo plano
- Responder a eventos do sistema com tarefas em segundo plano
- Definir condições para executar uma tarefa em segundo plano
- Atualizar um tile ativo a partir de uma tarefa em segundo plano
- Usar um gatilho de manutenção