Declarar tareas en segundo plano en el manifiesto de la aplicaciónDeclare background tasks in the application manifest

API importantesImportant APIs

Habilita el uso de tareas en segundo plano declarándolas como extensiones en el manifiesto de la aplicación.Enable the use of background tasks by declaring them as extensions in the app manifest.

Importante

Este artículo es específico de tareas fuera del proceso en segundo plano.This article is specific to out-of-process background tasks. Las tareas en segundo plano dentro del proceso no se declaran en el manifiesto.In-process background tasks are not declared in the manifest.

Las tareas en segundo plano fuera de proceso se deben declarar en el manifiesto de la aplicación o, de lo contrario, la aplicación no podrá registrarlas (se producirá una excepción).Out-of-process background tasks must be declared in the app manifest or else your app will not be able to register them (an exception will be thrown). Además, las tareas en segundo plano fuera del proceso deben declararse en el manifiesto de la aplicación para pasar la certificación.Additionally, out-of-process background tasks must be declared in the application manifest to pass certification.

Este tema supone que has creado una o más clases de tareas en segundo plano y que tu aplicación registra cada tarea en segundo plano para ejecutar en respuesta a, al menos, un desencadenador.This topic assumes you have a created one or more background task classes, and that your app registers each background task to run in response to at least one trigger.

Agregar extensiones manualmenteAdd Extensions Manually

Abre el manifiesto de la aplicación (Package.appxmanifest) y ve al elemento Application.Open the application manifest (Package.appxmanifest) and go to the Application element. Crea un elemento Extensions (si no existe uno ya).Create an Extensions element (if one doesn't already exist).

El siguiente fragmento de código está tomado de la muestra de tarea en segundo plano:The following snippet is taken from the background task sample:

<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 extensión de tarea en segundo planoAdd a Background Task Extension

Declara tu primera tarea en segundo plano.Declare your first background task.

Copia este código al elemento Extensions (agregarás atributos en los siguientes pasos).Copy this code into the Extensions element (you will add attributes in the following steps).

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="">
      <BackgroundTasks>
        <Task Type="" />
      </BackgroundTasks>
    </Extension>
</Extensions>
  1. Cambia el atributo EntryPoint para que tenga la misma cadena que usó tu código como punto de entrada al registrar la tarea en segundo plano (namespace.classname).Change the EntryPoint attribute to have the same string used by your code as the entry point when registering your background task (namespace.classname).

    En este ejemplo, el punto de entrada es ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName:In this example, the entry point is ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName:

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ExampleBackgroundTaskClassName">
       <BackgroundTasks>
         <Task Type="" />
       </BackgroundTasks>
    </Extension>
</Extensions>
  1. Cambia la lista del atributo Task Type para indicar el tipo de registro de tareas usado con esta tarea en segundo plano.Change the list of Task Type attribute to indicate the type of task registration used with this background task. Si la tarea en segundo plano se registra con varios tipos de desencadenadores, agrega elementos Task y atributos Type adicionales para cada uno.If the background task is registered with multiple trigger types, add additional Task elements and Type attributes for each one.

    Nota:    Asegúrese de enumerar cada uno de los tipos de desencadenador que está usando o la tarea en segundo plano no se registrará en los tipos de desencadenadores no declarados (el método de registro producirá un error y producirá una excepción).Note  Make sure to list each of the trigger types you're using, or the background task will not register with the undeclared trigger types (the Register method will fail and throw an exception).

    Este ejemplo de fragmento de código indica el uso de desencadenadores de eventos del sistema y de notificaciones de inserción:This snippet example indicates the use of system event triggers and push notifications:

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

Agregar varias extensiones de tareas en segundo planoAdd multiple background task extensions

Repite el paso 2 para todas las clases de tareas en segundo plano que haya registrado tu aplicación.Repeat step 2 for each additional background task class registered by your app.

El siguiente ejemplo es el elemento Application completo de la muestra de tarea en segundo plano.The following example is the complete Application element from the background task sample. Este muestra el uso de 2 clases de tareas en segundo plano con un total de 3 tipos de desencadenadores.This shows the use of 2 background task classes with a total of 3 trigger types. Copia la sección Extensions de este ejemplo y modifícala conforme sea necesario para declarar tareas en segundo plano en el manifiesto de la aplicación.Copy the Extensions section of this example, and modify it as needed, to declare background tasks in your application manifest.

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

Declare dónde se ejecutará la tarea en segundo planoDeclare where your background task will run

Puede especificar dónde se ejecutan las tareas en segundo plano:You can specify where your background tasks run:

  • De forma predeterminada, se ejecutan en el proceso de BackgroundTaskHost.exe.By default, they run in the BackgroundTaskHost.exe process.
  • En el mismo proceso que la aplicación de primer plano.In the same process as your foreground application.
  • Utilice ResourceGroup para colocar varias tareas en segundo plano en el mismo proceso de hospedaje o para separarlas en procesos diferentes.Use ResourceGroup to place multiple background tasks into the same hosting process, or to separate them into different processes.
  • 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 activa un nuevo desencadenador.Use SupportsMultipleInstances to run the background process in a new process that gets its own resource limits (memory, cpu) each time a new trigger is fired.

Ejecutarse en el mismo proceso que la aplicación en primer planoRun in the same process as your foreground application

En este XML de ejemplo se declara una tarea en segundo plano que se ejecuta en el mismo proceso que la aplicación en primer plano.Here is example XML that declares a background task that runs in the same process as the foreground application.

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

Cuando se especifica EntryPoint, la aplicación recibe una devolución de llamada al método especificado cuando se activa el desencadenador.When you specify EntryPoint, your application receives a callback to the specified method when the trigger fires. Si no especifica un puntode entrada, la aplicación recibe la devolución de llamada a través de OnBackgroundActivated ().If you do not specify an EntryPoint, your application receives the callback via OnBackgroundActivated(). Consulte crear y registrar una tarea en segundo plano en proceso para obtener más información.See Create and register an in-process background task for details.

Especifique dónde se ejecuta la tarea en segundo plano con el atributo ResourceGroup.Specify where your background task runs with the ResourceGroup attribute.

En este XML de ejemplo se declara una tarea en segundo plano que se ejecuta en un proceso de BackgroundTaskHost.exe, pero en uno independiente de otras instancias de tareas en segundo plano de la misma aplicación.Here is example XML that declares a background task that runs in a BackgroundTaskHost.exe process, but in a separate one than other instances of background tasks from the same app. Observa el atributo ResourceGroup, que identifica las tareas en segundo plano que se ejecutan juntas.Note the ResourceGroup attribute, which identifies which background tasks will run together.

<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 proceso nuevo cada vez que se activa un desencadenador con el atributo SupportsMultipleInstancesRun in a new process each time a trigger fires with the SupportsMultipleInstances attribute

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 activa un nuevo desencadenador.This example declares a background task that runs in a new process that gets its own resource limits (memory and CPU) every time a new trigger is fired. Tenga en cuenta que el uso de SupportsMultipleInstances Esto permite este comportamiento.Note the use of SupportsMultipleInstances which enables this behavior. Para usar este atributo debe tener como destino la versión de SDK ' 10.0.15063 ' (Windows 10 Creators Update) o posterior.In order to use this attribute you must target SDK version '10.0.15063' (Windows 10 Creators Update) or higher.

<Package
    xmlns:uap4="https://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 o ServerName junto con SupportsMultipleInstances .You cannot specify ResourceGroup or ServerName in conjunction with SupportsMultipleInstances.