Ejecutar una tarea en segundo plano cuando se actualice la aplicación para UWP

Obtenga información sobre cómo escribir una tarea en segundo plano que se ejecute después de actualizar la aplicación de la tienda de Plataforma universal de Windows (UWP).

El sistema operativo invoca la tarea en segundo plano de la tarea de actualización después de que el usuario instale una actualización en una aplicación instalada en el dispositivo. Esto permite a la aplicación realizar tareas de inicialización, como inicializar un nuevo canal de notificación de inserción, actualizar el esquema de la base de datos, etc., antes de que el usuario inicie la aplicación actualizada.

La tarea de actualización difiere del inicio de una tarea en segundo plano mediante el desencadenador ServicingComplete porque, en ese caso, la aplicación debe ejecutar al menos una vez antes de actualizarla para registrar la tarea en segundo plano que activará el desencadenador ServicingComplete . La tarea Actualizar no está registrada y, por tanto, una aplicación que nunca se ha ejecutado, pero que se actualiza, seguirá desencadenando su tarea de actualización.

Paso 1: Crear la clase de tarea en segundo plano

Al igual que con otros tipos de tareas en segundo plano, se implementa la tarea en segundo plano de la tarea de actualización como un componente de Windows Runtime. Para crear este componente, siga los pasos descritos en la sección Crear la clase Tarea en segundo plano de Crear y registrar una tarea en segundo plano fuera de proceso. Entre los pasos se incluyen:

  • Agregar un proyecto de componente Windows Runtime a la solución.
  • Crear una referencia desde la aplicación al componente.
  • Crear una clase pública y sellada en el componente que implementa IBackgroundTask.
  • Implementar el método Run , que es el punto de entrada necesario al que se llama cuando se ejecuta la tarea de actualización. Si va a realizar llamadas asincrónicas desde la tarea en segundo plano, Crear y registrar una tarea en segundo plano fuera de proceso explica cómo usar un aplazamiento en el método Run .

No es necesario registrar esta tarea en segundo plano (la sección "Registrar la tarea en segundo plano para ejecutarse" en el tema Crear y registrar una tarea en segundo plano fuera de proceso ) para usar la tarea de actualización. Este es el motivo principal para usar una tarea de actualización porque no es necesario agregar ningún código a la aplicación para registrar la tarea y la aplicación no tiene que ejecutar al menos una vez antes de actualizarse para registrar la tarea en segundo plano.

En el código de ejemplo siguiente se muestra un punto de partida básico para una clase de tarea en segundo plano update Task en C#. La propia clase de tarea en segundo plano ( y todas las demás clases del proyecto de tarea en segundo plano) deben ser públicas y selladas. La clase de tarea en segundo plano debe derivar de IBackgroundTask y tener un método Run() público con la firma que se muestra a continuación:

using Windows.ApplicationModel.Background;

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

Paso 2: Declarar la tarea en segundo plano en el manifiesto del paquete

En el Explorador de soluciones de Visual Studio, haga clic con el botón derecho en Package.appxmanifest y haga clic en Ver código para ver el manifiesto del paquete. Agregue el siguiente <Extensions> CÓDIGO XML para declarar la tarea de actualización:

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

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

En el XML anterior, asegúrese de que el EntryPoint atributo está establecido en el nombrespace.class de la clase de tarea de actualización. El nombre distingue mayúsculas de minúsculas.

Paso 3: Depurar o probar la tarea de actualización

Asegúrese de que ha implementado la aplicación en la máquina para que haya algo que actualizar.

Establezca un punto de interrupción en el método Run() de la tarea en segundo plano.

establecer punto de interrupción

A continuación, en el Explorador de soluciones, haga clic con el botón derecho en el proyecto de la aplicación (no en el proyecto de tarea en segundo plano) y, a continuación, haga clic en Propiedades. En la aplicación ventana Propiedades, haga clic en Depurar a la izquierda y, a continuación, seleccione No iniciar, pero depurar mi código cuando se inicie:

establecer la configuración de depuración

A continuación, para asegurarse de que updateTask se desencadene, aumente el número de versión del paquete. En el Explorador de soluciones, haga doble clic en el archivo Package.appxmanifest de la aplicación para abrir el diseñador de paquetes y, a continuación, actualice el número de compilación:

actualizar la versión

Ahora, en Visual Studio 2019 al presionar F5, la aplicación se actualizará y el sistema activará el componente UpdateTask en segundo plano. El depurador se asociará automáticamente al proceso en segundo plano. Se alcanzará el punto de interrupción y podrá recorrer la lógica de código de actualización.

Cuando se complete la tarea en segundo plano, puede iniciar la aplicación en primer plano desde el menú Inicio de Windows dentro de la misma sesión de depuración. El depurador se asociará automáticamente, esta vez al proceso en primer plano y podrá recorrer la lógica de la aplicación.

Nota:

Usuarios de Visual Studio 2015: los pasos anteriores se aplican a Visual Studio 2017 o Visual Studio 2019. Si usa Visual Studio 2015, puede usar las mismas técnicas para desencadenar y probar UpdateTask, excepto que Visual Studio no se asociará a él. Un procedimiento alternativo en VS 2015 es configurar un ApplicationTrigger que establece UpdateTask como su punto de entrada y desencadenar la ejecución directamente desde la aplicación en primer plano.

Vea también

Crear y registrar una tarea en segundo plano fuera del proceso