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.
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:
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:
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.