Compartilhar via


Dar suporte a seu app com tarefas em segundo plano

Observação

Esta página aborda o modelo de tarefa em segundo plano específico da UWP (IBackgroundTask, BackgroundTaskBuilder). Para aplicativos WPF e Windows Forms, use as diretrizes de tarefas em segundo plano correspondentes (SDK do Aplicativo Windows) para aplicativos de área de trabalho empacotados (diferentes namespaces, etapas de registro e requisitos de empacotamento MSIX), ou considere o Task Scheduler (nenhum empacotamento necessário) ou os .NET Worker Services (nenhum empacotamento necessário).

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

Reproduzindo mídia em segundo plano

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

Tarefas em segundo plano em processo 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 escrita 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 ou fora dele.

Tarefas em segundo plano fora do processo principal são mais resilientes porque o processo em segundo plano não pode derrubar o processo do aplicativo se algo der errado. Mas a resiliência tem o preço de 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 quando você registra 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 no 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

 Começando com Windows 10, você não precisa mais colocar um aplicativo na tela de bloqueio como um 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 evento do sistema (definidos em SystemTriggerType)

Nome do gatilho Descrição
Internet Disponível A Internet fica disponível.
NetworkStateChange Ocorre uma alteração de rede, como uma alteração no custo ou conectividade.
OnlineIdConnectedStateChange ID online associada às alterações da conta.
SmsReceived Uma nova mensagem SMS é recebida por um dispositivo de banda larga móvel instalado.
TimeZoneChange O fuso horário é alterado 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 seguintes condições (representadas pela enumeração SystemConditionType) podem ser usadas.

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

Adicione a condição InternetAvailable à tarefa em segundo plano BackgroundTaskBuilder.AddCondition para atrasar o acionamento 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 sua tarefa em segundo plano exigir conectividade de rede, defina IsNetworkRequested para garantir que a rede permaneça em pé enquanto a tarefa em segundo plano é executada. Isso informa a infraestrutura de tarefas em segundo plano para manter a rede ativa enquanto a tarefa está em execução, mesmo que o dispositivo tenha entrado no modo Connected Standby. Se sua tarefa em segundo plano não definir IsNetworkRequested, sua tarefa em segundo plano não poderá acessar a rede quando estiver no modo de Espera Conectada (por exemplo, quando a tela de um telefone estiver desativada).) 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 de manifesto do aplicativo

Antes que seu aplicativo possa registrar com êxito uma tarefa em segundo plano que seja executada fora do processo, ela deve ser declarada no manifesto do aplicativo. Tarefas em segundo plano executadas no mesmo processo que seu 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. O ControlChannelTrigger não tem suporte no telefone Windows.
Timer As tarefas em segundo plano podem ser executadas com tanta frequência quanto a cada 15 minutos e podem ser definidas para serem executadas em 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  

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

Para garantir que seu aplicativo Windows Universal continue a funcionar corretamente após liberar uma atualização, chame RemoveAccess e então chame RequestAccessAsync quando seu aplicativo for iniciado após a atualização. 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.

Disparadores de eventos do sistema

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

Nome do gatilho Descrição
UserPresent A tarefa em segundo plano é disparada quando o usuário se torna presente.
UserAway A tarefa em segundo plano é disparada quando o usuário fica ausente.
ControlChannelReset A tarefa em segundo plano é disparada quando um canal de controle é redefinido.
SessionConnected A tarefa em segundo plano é disparada quando a sessão está conectada.

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

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

 

Restrições de recursos para tarefas em segundo plano

As tarefas em segundo plano são leves. Manter a execução em segundo plano ao 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 recurso a tarefas em segundo plano.

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

Restrições de memória

Devido às restrições de recurso para dispositivos de memória baixa, 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 excederia esse limite, a operação falhará e poderá gerar uma exceção fora de memória , que a tarefa pode manipular. Se a tarefa não lidar com a exceção fora de memória ou a natureza da operação tentada for tal que uma exceção fora de memória não foi gerada, a tarefa será encerrada imediatamente.

Você pode usar as APIs MemoryManager para consultar o uso e o limite de memória atual 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 de baixa 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 usam 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ê isenta 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 habilitado, 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 loja da Microsoft, consulte Executar em segundo plano indefinidamente para saber como usar os recursos para executar uma tarefa contínua ou uma sessão de execução estendida em segundo plano indefinidamente.

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

Para impedir que as cotas de recursos interfiram na funcionalidade de comunicação em tempo real, tarefas em segundo plano usando o ControlChannelTrigger e PushNotificationTrigger recebem cotas de recursos de CPU garantidas para cada tarefa em execução. As cotas de recursos são conforme mencionado 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 ControlChannelTrigger e PushNotificationTrigger tarefas em segundo plano. O sistema sempre os trata 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 à energia ac. 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 execução longa, 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 nela.

Importante

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

Algumas operações críticas do dispositivo, como atualizações de firmware de execução prolongada, não podem ser executadas com o DeviceUseTrigger. Essas operações só podem ser executadas no computador e somente por um aplicativo privilegiado que usa o DeviceServicingTrigger. Um aplicativo privilegiado é um aplicativo que o fabricante do dispositivo autorizou a 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 o progresso, a conclusão e o 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, consulte:

Gerenciar uma tarefa em segundo plano cancelada
Monitorar o progresso e a conclusão da tarefa 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 tarefas que não são mais necessárias. Isso garante que todos os registros de tarefas em segundo plano sejam up-to-date sempre que o aplicativo for iniciado.

Orientações conceituais para multitarefa no Windows 10

Diretrizes relacionadas para tarefas de segundo plano