Criar e registrar uma tarefa em segundo plano em processo

APIs importantes

Este tópico demonstra como criar e registrar uma tarefa em segundo plano que é executada no mesmo processo que seu aplicativo.

As tarefas em segundo plano no processo são mais simples de implementar do que as tarefas em segundo plano fora do processo. No entanto, eles são menos resilientes. Se o código em execução em uma tarefa em segundo plano em processo falhar, ele desativará seu aplicativo. Observe também que DeviceUseTrigger, DeviceServicingTrigger e IoTStartupTask não podem ser usados com o modelo em processo. Também não é possível ativar uma tarefa em segundo plano VoIP em seu aplicativo. Esses gatilhos e tarefas ainda têm suporte usando o modelo de tarefa em segundo plano fora do processo.

Lembre-se de que a atividade em segundo plano pode ser encerrada mesmo quando executada dentro do processo em primeiro plano do aplicativo se ela for executada após os limites de tempo de execução. Para algumas finalidades, a resiliência de separar o trabalho em uma tarefa em segundo plano que é executada em um processo separado ainda é útil. Manter o trabalho em segundo plano como uma tarefa separada do aplicativo em primeiro plano pode ser a melhor opção para trabalhos que não exigem comunicação com o aplicativo em primeiro plano.

Conceitos básicos

O modelo em processo aprimora o ciclo de vida do aplicativo com notificações aprimoradas para quando seu aplicativo está em primeiro ou segundo plano. Dois novos eventos estão disponíveis no objeto Application para essas transições: EnteredBackground e LeavingBackground. Esses eventos se ajustam ao ciclo de vida do aplicativo com base no estado de visibilidade do aplicativo Leia mais sobre esses eventos e como eles afetam o ciclo de vida do aplicativo em Ciclo de vida do aplicativo.

Em um alto nível, você manipulará o evento EnteredBackground para executar seu código que será executado enquanto seu aplicativo estiver em execução em segundo plano e manipulará LeavingBackground para saber quando seu aplicativo foi movido para o primeiro plano.

Registrar seu gatilho de tarefa em segundo plano

A atividade em segundo plano no processo é registrada da mesma forma que a atividade em segundo plano fora do processo. Todos os gatilhos em segundo plano começam com o registro usando o BackgroundTaskBuilder. O construtor facilita o registro de uma tarefa em segundo plano definindo todos os valores necessários em um só lugar:

var builder = new BackgroundTaskBuilder();
builder.Name = "My Background Trigger";
builder.SetTrigger(new TimeTrigger(15, true));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();

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, você deve chamar RemoveAccess e, em seguida, chamar RequestAccessAsync quando seu aplicativo for iniciado após ser atualizado. Para obter mais informações, consulte Diretrizes para tarefas em segundo plano.

Para atividades em segundo plano no processo, você não define TaskEntryPoint. Deixá-lo em branco habilita o ponto de entrada padrão, um novo método protegido no objeto Application chamado OnBackgroundActivated().

Depois que um gatilho for registrado, ele será acionado com base no tipo de gatilho definido no método SetTrigger . No exemplo acima, um TimeTrigger é usado, que será acionado quinze minutos a partir do momento em que foi registrado.

Adicionar uma condição para controlar quando sua tarefa será executada (opcional)

Você pode adicionar uma condição para controlar quando sua tarefa será executada após a ocorrência do evento de gatilho. Por exemplo, se você não quiser que a tarefa seja executada até que o usuário esteja presente, use a condição UserPresent. Para obter uma lista de condições possíveis, consulte SystemConditionType.

O código de exemplo a seguir atribui uma condição que exige que o usuário esteja presente:

builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));

Coloque seu código de atividade em segundo plano em OnBackgroundActivated()

Coloque o código de atividade em segundo plano em OnBackgroundActivated para responder ao gatilho em segundo plano quando ele for acionado. OnBackgroundActivated pode ser tratado como IBackgroundTask.Run. O método tem um parâmetro BackgroundActivatedEventArgs , que contém tudo o que o método Run oferece. Por exemplo, em App.xaml.cs:

using Windows.ApplicationModel.Background;

...

sealed partial class App : Application
{
  ...

  protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
  {
      base.OnBackgroundActivated(args);
      IBackgroundTaskInstance taskInstance = args.TaskInstance;
      DoYourBackgroundWork(taskInstance);  
  }
}

Para obter um exemplo mais avançado de OnBackgroundActivated , consulte Converter um serviço de aplicativo para ser executado no mesmo processo que seu aplicativo host.

Lidar com o progresso e a conclusão da tarefa em segundo plano

O progresso e a conclusão da tarefa podem ser monitorados da mesma forma que as tarefas em segundo plano de vários processos (consulte Monitorar o progresso e a conclusão da tarefa em segundo plano), mas você provavelmente descobrirá que pode rastreá-los mais facilmente usando variáveis para acompanhar o progresso ou o status de conclusão em seu aplicativo. Essa é uma das vantagens de ter seu código de atividade em segundo plano em execução no mesmo processo que seu aplicativo.

Lidar com o cancelamento de tarefas em segundo plano

As tarefas em segundo plano em processo são canceladas da mesma forma que as tarefas em segundo plano fora do processo (consulte Manipular uma tarefa em segundo plano cancelada). Lembre-se de que o manipulador de eventos BackgroundActivated deve sair antes que o cancelamento ocorra, ou todo o processo será encerrado. Se o aplicativo em primeiro plano fechar inesperadamente quando você cancelar a tarefa em segundo plano, verifique se o manipulador foi encerrado antes do cancelamento.

O manifesto

Ao contrário das tarefas em segundo plano fora do processo, você não precisa adicionar informações da tarefa em segundo plano ao manifesto do pacote para executar tarefas em segundo plano no processo.

Resumo e próximas etapas

Agora você deve entender os conceitos básicos de como escrever uma tarefa em segundo plano em processo.

Consulte os tópicos relacionados a seguir para obter referência de API, diretrizes conceituais de tarefas em segundo plano e instruções mais detalhadas para escrever aplicativos que usam tarefas em segundo plano.

Tópicos instrucionais detalhados da tarefa em segundo plano

Diretrizes de tarefas em segundo plano

Referência da API de tarefa em segundo plano