Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las APIs importantes
Habilite el uso de tareas en segundo plano declarandolas 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 fragmento de código siguiente 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 su 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>
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>
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 usa, 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 siguiente ejemplo es el elemento de aplicación completo de la tarea en segundo plano de ejemplo . 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.
- Dentro del mismo proceso que tu 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.
Ejecuta 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 un retorno de llamada al método especificado cuando se activa el disparador. Si no especifica un EntryPoint, su aplicación recibe el callback a través de OnBackgroundActivated(). Consulte Crear y registrar 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 atributo ResourceGroup
, 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 activa un trigger 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 permite este comportamiento. Para poder usar este atributo, debe tener como destino la versión del SDK "10.0.15063" (Windows 10 Creators Update) 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 puede especificar ResourceGroup
ni ServerName
junto con SupportsMultipleInstances
.