Executar uma tarefa em segundo plano quando a sua aplicação UWP for atualizada

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

A tarefa de segundo plano Update Task é invocada pelo sistema operativo depois de o utilizador instalar uma atualização numa aplicação instalada 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 do banco de dados e assim por diante, antes que o usuário inicie seu aplicativo atualizado.

A Tarefa de Atualização difere de iniciar uma tarefa em segundo plano usando o gatilho ServicingComplete da 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 do . A Tarefa de Atualização não está registrada e, portanto, um aplicativo que nunca foi executado, mas que foi atualizado, ainda terá sua tarefa de atualização acionada.

Etapa 1: Criar a classe de tarefa em segundo plano

Como acontece com outros tipos de tarefas em segundo plano, você implementa a tarefa Atualizar tarefa em segundo plano como um componente do Tempo de Execução do Windows. Para criar este componente, siga as etapas na seção Criar a classe de tarefa de fundo do Criar e registrar uma tarefa em segundo plano fora de processo. As etapas incluem:

  • Adicionar um projeto de componente do Tempo de Execução do Windows à sua solução.
  • Criando uma referência do seu aplicativo para o componente.
  • Criação de uma classe pública 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 fores fazer chamadas assíncronas a partir da tua tarefa em segundo plano, Criar e registar uma tarefa em segundo plano fora de processo explica como usar um adiamento no teu método Run.

Não é necessário registrar essa tarefa em segundo plano (a seção "Registrar a tarefa em segundo plano para ser executada" no tópicoCriar e registrar uma tarefa em segundo plano fora do processo) para usar a Tarefa de atualização. Essa é a principal razão 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 Update Task 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 público Run() 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 Explorador de Soluções do Visual Studio, clique com o botão direito do rato em Package.appxmanifest e clique em Ver Código para visualizar 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 atributo EntryPoint está definido como o nome namespace.class da sua classe de tarefa de atualização. O nome é sensível a maiúsculas.

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

Certifique-se de ter implantado seu aplicativo em sua máquina para que haja algo a ser atualizado.

Defina um ponto de interrupção no método Run() da sua 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 seu aplicativo (não no projeto de tarefa em segundo plano) e clique em Propriedades. Na janela Propriedades do aplicativo, clique em Depurar à esquerda e, em seguida, 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 acionado, aumente o número da versão do pacote. No Gerenciador de Soluções, clique duas vezes no arquivo de Package.appxmanifest seu aplicativo para abrir o designer de pacote e atualize o número Compilação:

atualizar a versão

Agora, no Visual Studio 2019, quando você pressionar F5, seu aplicativo será atualizado e o sistema ativará o componente UpdateTask em segundo plano. O depurador será automaticamente ligado 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á novamente anexado automaticamente, desta vez ao seu processo em primeiro plano, e você poderá percorrer a lógica do seu aplicativo.

Observação

Usuários do Visual Studio 2015: as etapas acima se aplicam ao Visual Studio 2017 ou Visual Studio 2019. Se você estiver usando o Visual Studio 2015, você pode 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 acionar a execução diretamente do aplicativo em primeiro plano.

Ver também

Criar e registrar uma tarefa em segundo plano fora do processo