Compartilhar via


Diretrizes para tarefas em segundo plano

Verifique se seu aplicativo atende aos requisitos para executar tarefas em segundo plano.

Diretrizes de tarefas em segundo plano

Considere as diretrizes a seguir ao desenvolver sua tarefa em segundo plano e antes de publicar seu aplicativo.

Se você usar uma tarefa em segundo plano para reproduzir mídia em segundo plano, consulte Reproduzir mídia em segundo plano para obter informações sobre melhorias no Windows 10, versão 1607, que facilitam muito.

Tarefas em segundo plano em processo versus fora do processo: Windows 10, versão 1607, introduziu tarefas em segundo plano em processo que permitem executar código em segundo plano no mesmo processo que seu aplicativo em primeiro plano. Considere os seguintes fatores ao decidir se deve ter tarefas em segundo plano em processo ou fora do processo:

Consideração Impacto
Resiliência Se o processo em segundo plano estiver em execução em outro processo, uma falha no processo em segundo plano não derrubará o aplicativo em primeiro plano. Além disso, a atividade em segundo plano pode ser encerrada, mesmo dentro do seu aplicativo, se for executada além dos limites de tempo de execução. Separar o trabalho em segundo plano em uma tarefa separada do aplicativo em primeiro plano pode ser uma opção melhor quando não é necessário que os processos em primeiro plano e em segundo plano se comuniquem entre si (já que uma das principais vantagens das tarefas em segundo plano no processo é que elas eliminam a necessidade de comunicação entre processos).
Simplicidade As tarefas em segundo plano no processo não exigem comunicação entre processos e são menos complexas de escrever.
Gatilhos disponíveis As tarefas em segundo plano no processo não dão suporte aos seguintes gatilhos: DeviceUseTrigger, DeviceServicingTrigger e IoTStartupTask.
VoIP As tarefas em segundo plano em processo não dão suporte à ativação de uma tarefa em segundo plano VoIP em seu aplicativo.

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.

Cotas 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. A maioria dos gatilhos é limitada a 30 segundos de uso do relógio de parede, enquanto alguns têm a capacidade de ser executados por até 10 minutos para concluir tarefas intensivas. As tarefas em segundo plano devem ser leves para economizar bateria e fornecer uma melhor experiência do usuário para aplicativos em primeiro plano. Consulte Dar suporte ao seu aplicativo com tarefas em segundo plano para obter as restrições de recursos aplicadas a tarefas em segundo plano.

Gerenciar tarefas em segundo plano: seu aplicativo deve obter uma lista de tarefas em segundo plano registradas, registrar-se para manipuladores de progresso e conclusão e lidar com esses eventos adequadamente. Suas classes de tarefas em segundo plano devem relatar o progresso, o cancelamento e a conclusão. Para obter mais informações, consulte Lidar com uma tarefa em segundo plano cancelada e Monitorar o progresso e a conclusão da tarefa em segundo plano.

Use BackgroundTaskDeferral: se sua classe de tarefa em segundo plano executar código assíncrono, certifique-se de usar adiamentos. Caso contrário, sua tarefa em segundo plano poderá ser encerrada prematuramente quando o método Run retornar (ou o método OnBackgroundActivated no caso de tarefas em segundo plano em processo). Para obter mais informações, consulte Criar e registrar uma tarefa em segundo plano fora do processo.

Como alternativa, solicite um adiamento e use async/await para concluir chamadas de método assíncronas. Feche o adiamento após as chamadas do método await .

Atualize o manifesto do aplicativo: para tarefas em segundo plano que são executadas fora do processo, declare cada tarefa em segundo plano no manifesto do aplicativo, juntamente com o tipo de gatilhos com os quais ela é usada. Caso contrário, seu aplicativo não poderá registrar a tarefa em segundo plano no tempo de execução.

Se você tiver várias tarefas em segundo plano, considere se elas devem ser executadas no mesmo processo de host ou separadas em diferentes processos de host. Coloque-os em processos de host separados se estiver preocupado com o fato de que uma falha em uma tarefa em segundo plano possa derrubar outras tarefas em segundo plano. Use a entrada Grupo de recursos no designer de manifesto para agrupar tarefas em segundo plano em diferentes processos de host.

Para definir o grupo de recursos, abra o designer Package.appxmanifest, escolha Declarações e adicione uma declaração do Serviço de Aplicativo:

Configuração do grupo de recursos

Consulte a referência de esquema de aplicativo para obter mais informações sobre a configuração do grupo de recursos.

As tarefas em segundo plano executadas no mesmo processo que o aplicativo em primeiro plano não precisam se declarar no manifesto do aplicativo. Para obter mais informações sobre como declarar tarefas em segundo plano que são executadas fora do processo no manifesto, consulte Declarar tarefas em segundo plano no manifesto do aplicativo.

Prepare-se para atualizações do aplicativo: se o aplicativo for atualizado, crie e registre uma tarefa em segundo plano ServicingComplete (consulte SystemTriggerType) para cancelar o registro de tarefas em segundo plano para a versão anterior do aplicativo e registre as tarefas em segundo plano para a nova versão. Esse também é um momento apropriado para executar atualizações de aplicativos que podem ser necessárias fora do contexto de execução em primeiro plano.

Solicitação para executar tarefas em segundo plano:

Importante A partir do Windows 10, os aplicativos não precisam mais estar na tela de bloqueio como pré-requisito para executar tarefas em segundo plano.

Os aplicativos da Plataforma Universal do Windows (UWP) podem executar todos os tipos de tarefas com suporte sem serem fixados na tela de bloqueio. No entanto, os aplicativos devem chamar GetAccessState e verificar se o aplicativo não foi negado de ser executado em segundo plano. Certifique-se de que GetAccessStatus não retorne uma das enumerações BackgroundAccessStatus negadas. Por exemplo, esse método retornará BackgroundAccessStatus.DeniedByUser se o usuário tiver negado explicitamente permissões de tarefa em segundo plano para seu aplicativo nas configurações do dispositivo.

Se o aplicativo for negado de ser executado em segundo plano, ele deverá chamar RequestAccessAsync e garantir que a resposta não seja negada antes de registrar tarefas em segundo plano.

Para obter mais informações sobre a escolha do usuário em relação à atividade em segundo plano e à Economia de bateria, consulte Otimizar a atividade em segundo plano.

Lista de verificação de tarefas em segundo plano

Aplica-se a tarefas em segundo plano dentro e fora do processo

  • Associe sua tarefa em segundo plano ao gatilho correto.
  • Adicione condições para ajudar a garantir que sua tarefa em segundo plano seja executada com êxito.
  • Lidar com o progresso, a conclusão e o cancelamento de tarefas em segundo plano.
  • Registre novamente suas tarefas em segundo plano durante a inicialização do aplicativo. Isso garante que eles sejam registrados na primeira vez que o aplicativo for iniciado. Ele também fornece uma maneira de detectar se o usuário desativou os recursos de execução em segundo plano do aplicativo (caso o registro falhe).
  • Verifique se há erros de registro de tarefas em segundo plano. Se apropriado, tente registrar a tarefa em segundo plano novamente com valores de parâmetro diferentes.
  • Para todas as famílias de dispositivos, exceto desktop, se o dispositivo ficar com pouca memória, as tarefas em segundo plano poderão ser encerradas. Se uma exceção de memória insuficiente não for exibida ou o aplicativo não lidar com ela, a tarefa em segundo plano será encerrada sem aviso e sem gerar o evento OnCanceled. Isso ajuda a garantir a experiência do usuário do aplicativo em primeiro plano. Sua tarefa em segundo plano deve ser projetada para lidar com esse cenário.

Aplica-se somente a tarefas em segundo plano fora do processo

  • Crie sua tarefa em segundo plano em um componente do Tempo de Execução do Windows.
  • Não exiba a interface do usuário que não seja notificações do sistema, blocos e atualizações de notificação da tarefa em segundo plano.
  • No método Run, solicite adiamentos para cada chamada de método assíncrono e feche-os quando o método for concluído. Ou use um adiamento com async/await.
  • Use o armazenamento persistente para compartilhar dados entre a tarefa em segundo plano e o aplicativo.
  • Declare cada tarefa em segundo plano no manifesto do aplicativo, juntamente com o tipo de gatilhos com os quais ela é usada. Verifique se o ponto de entrada e os tipos de gatilho estão corretos.
  • Não especifique um elemento Executable no manifesto, a menos que você esteja usando um gatilho que deve ser executado no mesmo contexto que o aplicativo (como o ControlChannelTrigger).

Aplica-se somente a tarefas em segundo plano no processo

  • Ao cancelar uma tarefa, certifique-se de que o BackgroundActivated manipulador de eventos seja encerrado antes que o cancelamento ocorra ou todo o processo será encerrado.
  • Escreva tarefas em segundo plano que sejam de curta duração. A maioria das tarefas em segundo plano é limitada a 30 segundos de uso do relógio de parede.

Coisas a evitar

  • Minimize o uso de comunicação entre processos via COM ou RPC.
  • O processo com o qual você está tentando se comunicar pode não estar em um estado de execução, o que pode resultar em um travamento.
  • Uma quantidade significativa de tempo pode ser gasta facilitando a comunicação entre processos e contará para o tempo alocado para executar sua tarefa em segundo plano.
  • Não confie na interação do usuário em tarefas em segundo plano.