Executar uma tarefa em segundo plano quando o aplicativo UWP é atualizado

Saiba como escrever uma tarefa em segundo plano que é executada depois que seu aplicativo da loja UWP (Plataforma Universal do Windows) é atualizado.

A tarefa em segundo plano da Tarefa de Atualização é invocada pelo sistema operacional depois que o usuário instala uma atualização em um aplicativo instalado no dispositivo. Isso permite que seu aplicativo execute tarefas de inicialização, como inicializar um novo canal de notificação por push, atualizar o esquema de banco de dados e assim por diante, antes que o usuário inicie seu aplicativo atualizado.

A Tarefa de Atualização difere da inicialização de uma tarefa em segundo plano usando o gatilho ServicingComplete porque, nesse caso, seu aplicativo deve ser executado pelo menos uma vez antes de ser atualizado para registrar a tarefa em segundo plano que será ativada pelo gatilho ServicingComplete . A Tarefa de Atualização não está registrada e, portanto, um aplicativo que nunca foi executado, mas que é atualizado, ainda terá sua tarefa de atualização disparada.

Etapa 1: Criar a classe de tarefa em segundo plano

Assim como acontece com outros tipos de tarefas em segundo plano, você implementa a tarefa em segundo plano Tarefa de Atualização como um componente do Tempo de Execução do Windows. Para criar esse componente, siga as etapas na seção Criar a classe Tarefa em Segundo Plano de Criar e registrar uma tarefa em segundo plano fora do processo. As etapas são as seguintes:

  • Adicionando um projeto de componente do Tempo de Execução do Windows à sua solução.
  • Criando uma referência do seu aplicativo para o componente.
  • Criando uma classe pública e selada no componente que implementa IBackgroundTask.
  • Implementando o método Run , que é o ponto de entrada necessário que é chamado quando a Tarefa de Atualização é executada. Se você for fazer chamadas assíncronas de sua tarefa em segundo plano, Criar e registrar uma tarefa em segundo plano fora do processo explica como usar um adiamento em seu método Run .

Você não precisa registrar essa tarefa em segundo plano (a seção "Registrar a tarefa em segundo plano a ser executada" no tópico Criar e registrar uma tarefa em segundo plano fora do processo) para usar a Tarefa de Atualização. Esse é o principal motivo para usar uma Tarefa de Atualização porque você não precisa adicionar nenhum código ao seu aplicativo para registrar a tarefa e o aplicativo não precisa ser executado pelo menos uma vez antes de ser atualizado para registrar a tarefa em segundo plano.

O código de exemplo a seguir mostra um ponto de partida básico para uma classe de tarefa em segundo plano da Tarefa de Atualização em C#. A própria classe de tarefa em segundo plano - e todas as outras classes no projeto de tarefa em segundo plano - precisam ser públicas e seladas. Sua classe de tarefa em segundo plano deve derivar de IBackgroundTask e ter um método Run() público com a assinatura mostrada abaixo:

using Windows.ApplicationModel.Background;

namespace BackgroundTasks
{
    public sealed class UpdateTask : IBackgroundTask
    {
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            // your app migration/update code here
        }
    }
}

Etapa 2: Declarar sua tarefa em segundo plano no manifesto do pacote

No Gerenciador de Soluções do Visual Studio, clique com o botão direito do mouse em Package.appxmanifest e clique em Exibir Código para exibir o manifesto do pacote. Adicione o seguinte <Extensions> XML para declarar sua tarefa de atualização:

<Package ...>
    ...
  <Applications>  
    <Application ...>  
        ...
      <Extensions>  
        <Extension Category="windows.updateTask"  EntryPoint="BackgroundTasks.UpdateTask">  
        </Extension>  
      </Extensions>

    </Application>  
  </Applications>  
</Package>

No XML acima, verifique se o EntryPoint atributo está definido como o nome namespace.class da classe de tarefa de atualização. O nome diferencia maiúsculas de minúsculas.

Etapa 3: Depurar/testar sua tarefa de atualização

Verifique se você implantou seu aplicativo em seu computador para que haja algo a ser atualizado.

Defina um ponto de interrupção no método Run() da tarefa em segundo plano.

definir ponto de interrupção

Em seguida, no gerenciador de soluções, clique com o botão direito do mouse no projeto do aplicativo (não no projeto de tarefa em segundo plano) e clique em Propriedades. Na janela Propriedades do aplicativo, clique em Depurar à esquerda e selecione Não iniciar, mas depurar meu código quando ele for iniciado:

Definir configurações de depuração

Em seguida, para garantir que o UpdateTask seja disparado, aumente o número de versão do pacote. No Gerenciador de Soluções, clique duas vezes no arquivo Package.appxmanifest do aplicativo para abrir o designer de pacotes e atualize o número de build:

Atualize a versão

Agora, no Visual Studio 2019, quando você pressionar F5, seu aplicativo será atualizado e o sistema ativará seu componente UpdateTask em segundo plano. O depurador será anexado automaticamente ao processo em segundo plano. Seu ponto de interrupção será atingido e você poderá percorrer a lógica do código de atualização.

Quando a tarefa em segundo plano for concluída, você poderá iniciar o aplicativo em primeiro plano no menu Iniciar do Windows na mesma sessão de depuração. O depurador será anexado automaticamente novamente, desta vez ao processo em primeiro plano, e você poderá percorrer a lógica do aplicativo.

Observação

Usuários do Visual Studio 2015: as etapas acima se aplicam ao Visual Studio 2017 ou ao Visual Studio 2019. Se você estiver usando o Visual Studio 2015, poderá usar as mesmas técnicas para disparar e testar o UpdateTask, exceto que o Visual Studio não será anexado a ele. Um procedimento alternativo no VS 2015 é configurar um ApplicationTrigger que define o UpdateTask como seu Ponto de Entrada e disparar a execução diretamente do aplicativo em primeiro plano.

Confira também

Criar e registrar uma tarefa em segundo plano fora do processo.