Compartir a través de


Declarar tareas en segundo plano en el manifiesto de la aplicación

API importantes

Habilita el uso de tareas en segundo plano declarándolas como extensiones en el manifiesto de la aplicación.

Importante

Este artículo es específico de las tareas en segundo plano fuera del proceso. Las tareas en segundo plano en proceso no se declaran en el manifiesto.

Las tareas en segundo plano fuera del proceso deben declararse en el manifiesto de la aplicación o, de lo contrario, la aplicación no podrá registrarlas (se producirá una excepción). Además, las tareas en segundo plano fuera del proceso deben declararse en el manifiesto de aplicación para pasar la certificación.

En este tema se supone que tiene una o varias clases de tareas en segundo plano creadas y que la aplicación registra cada tarea en segundo plano para ejecutarse en respuesta al menos a un desencadenador.

Agregar extensiones manualmente

Abra el manifiesto de aplicación (Package.appxmanifest) y vaya al elemento Application. Cree un elemento Extensions (si aún no existe).

El siguiente fragmento de código se toma del ejemplo de tarea en segundo plano:

<Application Id="App"
   ...
   <Extensions>
     <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.SampleBackgroundTask">
       <BackgroundTasks>
         <Task Type="systemEvent" />
         <Task Type="timer" />
       </BackgroundTasks>
     </Extension>
     <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ServicingComplete">
       <BackgroundTasks>
         <Task Type="systemEvent"/>
       </BackgroundTasks>
     </Extension>
   </Extensions>
 </Application>

Agregar una extensión de tarea en segundo plano

Declare la primera tarea en segundo plano.

Copie este código en el elemento Extensions (agregará atributos en los pasos siguientes).

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="">
      <BackgroundTasks>
        <Task Type="" />
      </BackgroundTasks>
    </Extension>
</Extensions>
  1. Cambie el atributo EntryPoint para que tenga la misma cadena usada por el código que el punto de entrada al registrar la tarea en segundo plano (namespace.classname).

    En este ejemplo, el punto de entrada es ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName:

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ExampleBackgroundTaskClassName">
       <BackgroundTasks>
         <Task Type="" />
       </BackgroundTasks>
    </Extension>
</Extensions>
  1. Cambie la lista del atributo Task Type para indicar el tipo de registro de tareas usado con esta tarea en segundo plano. Si la tarea en segundo plano se registra con varios tipos de desencadenadores, agregue elementos Task y atributos Type adicionales para cada uno.

    Nota Asegúrese de enumerar cada uno de los tipos de desencadenador que está usando o la tarea en segundo plano no se registrará con los tipos de desencadenador no declarados (el método Register producirá un error y producirá una excepción).

    En este ejemplo de fragmento de código se indica el uso de desencadenadores de eventos del sistema y notificaciones push:

<Extension Category="windows.backgroundTasks" EntryPoint="Tasks.BackgroundTaskClass">
    <BackgroundTasks>
        <Task Type="systemEvent" />
        <Task Type="pushNotification" />
    </BackgroundTasks>
</Extension>

Agregar varias extensiones de tareas en segundo plano

Repita el paso 2 para cada clase de tareas en segundo plano adicional registrada por la aplicación.

El ejemplo siguiente es el elemento Application completo del ejemplo de tarea en segundo plano. Esto muestra el uso de 2 clases de tareas en segundo plano con un total de 3 tipos de desencadenador. Copie la sección Extensiones de este ejemplo y modifíquela según sea necesario para declarar tareas en segundo plano en el manifiesto de aplicación.

<Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="BackgroundTask.App">
        <uap:VisualElements
          DisplayName="BackgroundTask"
          Square150x150Logo="Assets\StoreLogo-sdk.png"
          Square44x44Logo="Assets\SmallTile-sdk.png"
          Description="BackgroundTask"

          BackgroundColor="#00b2f0">
          <uap:LockScreen Notification="badgeAndTileText" BadgeLogo="Assets\smalltile-Windows-sdk.png" />
            <uap:SplashScreen Image="Assets\Splash-sdk.png" />
            <uap:DefaultTile DefaultSize="square150x150Logo" Wide310x150Logo="Assets\tile-sdk.png" >
                <uap:ShowNameOnTiles>
                    <uap:ShowOn Tile="square150x150Logo" />
                    <uap:ShowOn Tile="wide310x150Logo" />
                </uap:ShowNameOnTiles>
            </uap:DefaultTile>
        </uap:VisualElements>

      <Extensions>
        <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.SampleBackgroundTask">
          <BackgroundTasks>
            <Task Type="systemEvent" />
            <Task Type="timer" />
          </BackgroundTasks>
        </Extension>
        <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ServicingComplete">
          <BackgroundTasks>
            <Task Type="systemEvent"/>
          </BackgroundTasks>
        </Extension>
      </Extensions>
    </Application>
</Applications>

Declarar dónde se ejecutará la tarea en segundo plano

Puede especificar dónde se ejecutan las tareas en segundo plano:

  • De forma predeterminada, se ejecutan en el proceso de BackgroundTaskHost.exe.
  • En el mismo proceso que la aplicación en primer plano.
  • Use ResourceGroup para colocar varias tareas en segundo plano en el mismo proceso de hospedaje o para separarlas en distintos procesos.
  • Use SupportsMultipleInstances para ejecutar el proceso en segundo plano en un nuevo proceso que obtiene sus propios límites de recursos (memoria, cpu) cada vez que se desencadena un nuevo desencadenador.

Ejecutar en el mismo proceso que la aplicación en primer plano

Este es un XML de ejemplo que declara una tarea en segundo plano que se ejecuta en el mismo proceso que la aplicación en primer plano.

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="ExecModelTestBackgroundTasks.ApplicationTriggerTask">
        <BackgroundTasks>
            <Task Type="systemEvent" />
        </BackgroundTasks>
    </Extension>
</Extensions>

Al especificar EntryPoint, la aplicación recibe una devolución de llamada al método especificado cuando se activa el desencadenador. Si no especifica un EntryPoint, la aplicación recibe la devolución de llamada a través de OnBackgroundActivated().. Consulte Creación y registro de una tarea en segundo plano en proceso para obtener más información.

Especifique dónde se ejecuta la tarea en segundo plano con el atributo ResourceGroup.

Este es un XML de ejemplo que declara una tarea en segundo plano que se ejecuta en un proceso de BackgroundTaskHost.exe, pero en una instancia independiente de otras instancias de tareas en segundo plano de la misma aplicación. Tenga en cuenta el ResourceGroup atributo , que identifica qué tareas en segundo plano se ejecutarán juntas.

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.SessionConnectedTriggerTask" ResourceGroup="foo">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimeZoneTriggerTask" ResourceGroup="foo">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimerTriggerTask" ResourceGroup="bar">
      <BackgroundTasks>
        <Task Type="timer" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.ApplicationTriggerTask" ResourceGroup="bar">
      <BackgroundTasks>
        <Task Type="general" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.MaintenanceTriggerTask" ResourceGroup="foobar">
      <BackgroundTasks>
        <Task Type="general" />
      </BackgroundTasks>
    </Extension>
</Extensions>

Ejecutar en un nuevo proceso cada vez que se desencadena un desencadenador con el atributo SupportsMultipleInstances

En este ejemplo se declara una tarea en segundo plano que se ejecuta en un nuevo proceso que obtiene sus propios límites de recursos (memoria y CPU) cada vez que se desencadena un nuevo desencadenador. Tenga en cuenta el uso de SupportsMultipleInstances que habilita este comportamiento. Para poder usar este atributo, debe tener como destino la versión del SDK "10.0.15063" (Actualización de Windows 10 para creadores) o posterior.

<Package
    xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4"
    ...
    <Applications>
        <Application ...>
            ...
            <Extensions>
                <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimerTriggerTask">
                    <BackgroundTasks uap4:SupportsMultipleInstances="true">
                        <Task Type="timer" />
                    </BackgroundTasks>
                </Extension>
            </Extensions>
        </Application>
    </Applications>

Nota:

No se puede especificar ResourceGroup ni ServerName junto con SupportsMultipleInstances.