Partilhar via


Dar suporte a seu app com tarefas em segundo plano

Os tópicos desta seção mostram como fazer com que o código leve seja executado em segundo plano em resposta a gatilhos. Você pode usar tarefas em segundo plano para fornecer funcionalidade quando seu aplicativo estiver suspenso ou não estiver em execução. Você também pode usar tarefas em segundo plano para aplicativos de comunicação em tempo real, como VOIP, e-mail e mensagens instantâneas.

Reproduzindo mídia em segundo plano

A partir do Windows 10, versão 1607, reproduzir áudio em segundo plano é muito mais fácil. Consulte Reproduzir mídia em segundo plano para obter mais informações.

Tarefas em segundo plano dentro e fora do processo

Há duas abordagens para implementar tarefas em segundo plano:

  • Em processo: o aplicativo e seu processo em segundo plano são executados no mesmo processo
  • Fora do processo: o aplicativo e o processo em segundo plano são executados em processos separados.

O suporte em segundo plano em processo foi introduzido no Windows 10, versão 1607, para simplificar a gravação de tarefas em segundo plano. Mas você ainda pode escrever tarefas em segundo plano fora do processo. Consulte Diretrizes para tarefas em segundo plano para obter recomendações sobre quando escrever uma tarefa em segundo plano em processo versus fora do processo.

As tarefas em segundo plano fora do processo são mais resilientes porque o processo em segundo plano não pode desativar o processo do aplicativo se algo der errado. Mas a resiliência tem o preço de uma maior complexidade para gerenciar a comunicação entre processos entre o aplicativo e a tarefa em segundo plano.

As tarefas em segundo plano fora do processo são implementadas como classes leves que implementam a interface IBackgroundTask que o sistema operacional executa em um processo separado (backgroundtaskhost.exe). Registre uma tarefa em segundo plano usando a classe BackgroundTaskBuilder. O nome da classe é usado para especificar o ponto de entrada ao registrar a tarefa em segundo plano.

No Windows 10, versão 1607, você pode habilitar a atividade em segundo plano sem criar uma tarefa em segundo plano. Em vez disso, você pode executar seu código em segundo plano diretamente dentro do processo do aplicativo em primeiro plano.

Para começar rapidamente com tarefas em segundo plano em processo, consulte Criar e registrar uma tarefa em segundo plano em processo.

Para começar rapidamente com tarefas em segundo plano fora do processo, consulte Criar e registrar uma tarefa em segundo plano fora do processo.

Dica

 A partir do Windows 10, você não precisa mais colocar um aplicativo na tela de bloqueio como pré-requisito para registrar uma tarefa em segundo plano para ele.

Tarefas em segundo plano para eventos do sistema

Seu aplicativo pode responder a eventos gerados pelo sistema registrando uma tarefa em segundo plano com a classe SystemTrigger . Um aplicativo pode usar qualquer um dos seguintes gatilhos de eventos do sistema (definidos em SystemTriggerType)

Nome do gatilho Descrição
InternetDisponível A Internet torna-se disponível.
Mudança de Estado de Rede Ocorre uma alteração de rede, como uma alteração no custo ou na conectividade.
OnlineIdConnectedStateChange ID online associado às alterações da conta.
SmsRecebido Uma nova mensagem SMS é recebida por um dispositivo de banda larga móvel instalado.
Mudança de fuso horário O fuso horário muda no dispositivo (por exemplo, quando o sistema ajusta o relógio para o horário de verão).

Para obter mais informações, consulte Responder a eventos do sistema com tarefas em segundo plano.

Condições para tarefas em segundo plano

Você pode controlar quando a tarefa em segundo plano é executada, mesmo depois de disparada, adicionando uma condição. Uma vez disparada, uma tarefa em segundo plano não será executada até que todas as suas condições sejam atendidas. As condições a seguir (representadas pela enumeração SystemConditionType ) podem ser usadas.

Nome da condição Descrição
InternetDisponível A Internet deve estar disponível.
InternetNotAvailable A Internet deve estar indisponível.
Sessão conectada A sessão deve estar conectada.
SessãoDesconectada A sessão deve ser desconectada.
UserNotPresent O usuário deve estar ausente.
UsuárioPresente O usuário deve estar presente.

Adicione a condição InternetAvailable à sua tarefa em segundo plano BackgroundTaskBuilder.AddCondition para atrasar o disparo da tarefa em segundo plano até que a pilha de rede esteja em execução. Essa condição economiza energia porque a tarefa em segundo plano não será executada até que a rede esteja disponível. Essa condição não fornece ativação em tempo real.

Se a tarefa em segundo plano exigir conectividade de rede, defina IsNetworkRequested para garantir que a rede permaneça ativa enquanto a tarefa em segundo plano é executada. Isso solicita que a infraestrutura de tarefas em segundo plano acompanhe a rede enquanto a tarefa está em execução, mesmo se o dispositivo entrar no modo de Espera Conectado. Se a tarefa em segundo plano não definir IsNetworkRequested, ela não poderá acessar a rede quando estiver no modo de espera conectado (por exemplo, quando a tela de um telefone estiver desligada). Para obter mais informações sobre condições de tarefa em segundo plano, consulte Definir condições para executar uma tarefa em segundo plano.

Requisitos do manifesto do aplicativo

Antes que seu aplicativo possa registrar com êxito uma tarefa em segundo plano que é executada fora do processo, ela deve ser declarada no manifesto do aplicativo. As tarefas em segundo plano executadas no mesmo processo que o aplicativo host não precisam ser declaradas no manifesto do aplicativo. Para obter mais informações, consulte Declarar tarefas em segundo plano no manifesto do aplicativo.

Tarefas em segundo plano

Os seguintes gatilhos em tempo real podem ser usados para executar código personalizado leve em segundo plano:

Gatilho em tempo real Descrição
Canal de controle As tarefas em segundo plano podem manter uma conexão ativa e receber mensagens no canal de controle usando o ControlChannelTrigger. Se o aplicativo estiver escutando um soquete, você poderá usar o Socket Broker em vez do ControlChannelTrigger. Para obter mais detalhes sobre como usar o Socket Broker, consulte SocketActivityTrigger. Não há suporte para o ControlChannelTrigger no Windows Phone.
Temporizador As tarefas em segundo plano podem ser executadas a cada 15 minutos e podem ser definidas para serem executadas em um determinado momento usando o TimeTrigger. Para obter mais informações, consulte Executar uma tarefa em segundo plano em um temporizador.
Notificação por push As tarefas em segundo plano respondem ao PushNotificationTrigger para receber notificações por push brutas.

Observação  

Os aplicativos universais do Windows devem chamar RequestAccessAsync antes de registrar qualquer um dos tipos de gatilho em segundo plano.

Para garantir que seu aplicativo Universal do Windows continue a ser executado corretamente após o lançamento de uma atualização, chame RemoveAccess e, em seguida, chame RequestAccessAsync quando seu aplicativo for iniciado após ser atualizado. Para obter mais informações, consulte Diretrizes para tarefas em segundo plano.

Limites no número de instâncias de gatilho: há limites para quantas instâncias de alguns gatilhos um aplicativo pode registrar. Um aplicativo só pode registrar ApplicationTrigger, MediaProcessingTrigger e DeviceUseTrigger uma vez por instância do aplicativo. Se um aplicativo ultrapassar esse limite, o registro gerará uma exceção.

Gatilhos de eventos do sistema

A enumeração SystemTriggerType representa os seguintes gatilhos de eventos do sistema:

Nome do gatilho Descrição
UsuárioPresente A tarefa em segundo plano é disparada quando o usuário se torna presente.
Ausência do usuário A tarefa em segundo plano é disparada quando o usuário se torna ausente.
Reinicialização do Canal de Controle A tarefa em segundo plano é acionada quando um canal de controle é redefinido.
Sessão conectada A tarefa em segundo plano é acionada quando a sessão é conectada.

  O evento do sistema a seguir aciona o sinal quando o usuário move um aplicativo para dentro ou para fora da tela de bloqueio.

Nome do gatilho Descrição
LockScreenApplicationAdicionado Um bloco de aplicativo é adicionado à tela de bloqueio.
LockScreenApplicationRemovido Um bloco de aplicativo é removido da tela de bloqueio.

 

Restrições de recursos de tarefas em segundo plano

As tarefas em segundo plano são leves. Manter a execução em segundo plano no mínimo garante a melhor experiência do usuário com aplicativos em primeiro plano e duração da bateria. Isso é imposto aplicando restrições de recursos a tarefas em segundo plano.

As tarefas em segundo plano são limitadas a 30 segundos de uso do relógio de parede.

Restrições de memória

Devido às restrições de recursos para dispositivos com pouca memória, as tarefas em segundo plano podem ter um limite de memória que determina a quantidade máxima de memória que a tarefa em segundo plano pode usar. Se a tarefa em segundo plano tentar uma operação que exceda esse limite, a operação falhará e poderá gerar uma exceção de memória insuficiente que a tarefa pode manipular. Se a tarefa não manipular a exceção de falta de memória ou a natureza da tentativa de operação for tal que uma exceção de falta de memória não tenha sido gerada, a tarefa será encerrada imediatamente.

Você pode usar as APIs do MemoryManager para consultar o uso e o limite de memória atuais para descobrir seu limite (se houver) e monitorar o uso contínuo de memória da tarefa em segundo plano.

Limite por dispositivo para aplicativos com tarefas em segundo plano para dispositivos com pouca memória

Em dispositivos com restrição de memória, há um limite para o número de aplicativos que podem ser instalados em um dispositivo e usar tarefas em segundo plano a qualquer momento. Se esse número for excedido, a chamada para RequestAccessAsync, que é necessária para registrar todas as tarefas em segundo plano, falhará.

Economia de Bateria

A menos que você isente seu aplicativo para que ele ainda possa executar tarefas em segundo plano e receber notificações por push quando a Economia de bateria estiver ativada, o recurso Economia de bateria, quando ativado, impedirá que tarefas em segundo plano sejam executadas quando o dispositivo não estiver conectado à energia externa e a bateria ficar abaixo de uma quantidade especificada de energia restante. Isso não impedirá que você registre tarefas em segundo plano.

No entanto, para aplicativos empresariais e aplicativos que não serão publicados na Microsoft Store, consulte Executar em segundo plano indefinidamente para saber como usar recursos para executar uma tarefa em segundo plano ou uma sessão de execução estendida em segundo plano indefinidamente.

Garantias de recursos de tarefas em segundo plano para comunicação em tempo real

Para impedir que as cotas de recursos interfiram na funcionalidade de comunicação em tempo real, as tarefas em segundo plano que usam ControlChannelTrigger e PushNotificationTrigger recebem cotas de recursos de CPU garantidas para cada tarefa em execução. As cotas de recursos são as mencionadas acima e permanecem constantes para essas tarefas em segundo plano.

Seu aplicativo não precisa fazer nada diferente para obter as cotas de recursos garantidas para tarefas em segundo plano ControlChannelTrigger e PushNotificationTrigger. O sistema sempre trata essas tarefas como tarefas críticas em segundo plano.

Gatilho de manutenção

As tarefas de manutenção só são executadas quando o dispositivo está conectado à alimentação CA. Para obter mais informações, consulte Usar um gatilho de manutenção.

Tarefas em segundo plano para sensores e dispositivos

Seu aplicativo pode acessar sensores e dispositivos periféricos de uma tarefa em segundo plano com a classe DeviceUseTrigger. Você pode usar esse gatilho para operações de longa duração, como sincronização ou monitoramento de dados. Ao contrário das tarefas para eventos do sistema, uma tarefa DeviceUseTrigger só pode ser disparada enquanto seu aplicativo está em execução em primeiro plano e nenhuma condição pode ser definida nele.

Importante

O DeviceUseTrigger e o DeviceServicingTrigger não podem ser usados com tarefas em segundo plano no processo.

Algumas operações críticas do dispositivo, como atualizações de firmware de longa execução, não podem ser executadas com o DeviceUseTrigger. Essas operações podem ser executadas somente no computador e somente por um aplicativo privilegiado que usa o DeviceServicingTrigger. Um aplicativo privilegiado é um aplicativo que o fabricante do dispositivo autorizou para executar essas operações. Os metadados do dispositivo são usados para especificar qual aplicativo, se houver, foi designado como o aplicativo privilegiado para um dispositivo. Para obter mais informações, consulte Sincronização e atualização de dispositivos para aplicativos de dispositivo da Microsoft Store

Gerenciando tarefas em segundo plano

As tarefas em segundo plano podem relatar progresso, conclusão e cancelamento para seu aplicativo usando eventos e armazenamento local. Seu aplicativo também pode capturar exceções geradas por uma tarefa em segundo plano e gerenciar o registro de tarefas em segundo plano durante as atualizações do aplicativo. Para obter mais informações, confira:

Tratar uma tarefa em segundo plano cancelada
Monitorar o progresso e a conclusão de tarefas em segundo plano

Verifique o registro da tarefa em segundo plano durante a inicialização do aplicativo. Verifique se as tarefas em segundo plano desagrupadas do aplicativo estão presentes em BackgroundTaskBuilder.AllTasks. Registre novamente os que não estão presentes. Cancele o registro de todas as tarefas que não são mais necessárias. Isso garante que todos os registros de tarefas em segundo plano estejam atualizados sempre que o aplicativo for iniciado.

Diretrizes conceituais para multitarefa no Windows 10

Diretrizes relacionadas à tarefa em segundo plano