Partager via


Déclarer des tâches en arrière-plan dans le manifeste de l’application

API importantes

Activez l’utilisation des tâches en arrière-plan en les déclarant comme extensions dans le manifeste de l’application.

Important

Cet article est spécifique aux tâches en arrière-plan hors processus. Les tâches en arrière-plan in-process ne sont pas déclarées dans le manifeste.

Les tâches en arrière-plan hors processus doivent être déclarées dans le manifeste de l’application ou votre application ne pourra pas les inscrire (une exception sera levée). En outre, les tâches en arrière-plan hors processus doivent être déclarées dans le manifeste de l’application pour passer la certification.

Cette rubrique suppose que vous avez créé une ou plusieurs classes de tâches en arrière-plan et que votre application inscrit chaque tâche en arrière-plan à exécuter en réponse à au moins un déclencheur.

Ajouter manuellement des extensions

Ouvrez le manifeste de l’application (Package.appxmanifest) et accédez à l’élément Application. Créez un élément Extensions (s’il n’en existe pas déjà).

L’extrait de code suivant est extrait de l’exemple de tâche en arrière-plan :

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

Ajouter une extension de tâche en arrière-plan

Déclarez votre première tâche en arrière-plan.

Copiez ce code dans l’élément Extensions (vous allez ajouter des attributs dans les étapes suivantes).

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="">
      <BackgroundTasks>
        <Task Type="" />
      </BackgroundTasks>
    </Extension>
</Extensions>
  1. Modifiez l’attribut EntryPoint pour avoir la même chaîne utilisée par votre code que le point d’entrée lors de l’inscription de votre tâche en arrière-plan (namespace.classname).

    Dans cet exemple, le point d’entrée est ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName :

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ExampleBackgroundTaskClassName">
       <BackgroundTasks>
         <Task Type="" />
       </BackgroundTasks>
    </Extension>
</Extensions>
  1. Modifiez la liste de l’attribut Type de tâche pour indiquer le type d’inscription de tâche utilisé avec cette tâche en arrière-plan. Si la tâche en arrière-plan est inscrite avec plusieurs types de déclencheurs, ajoutez des éléments de tâche et des attributs type supplémentaires pour chacun d’eux.

    Notez que vous devez répertorier chacun des types de déclencheurs que vous utilisez, ou la tâche en arrière-plan ne s’inscrit pas auprès des types de déclencheurs non déclarés (la méthode Register échoue et lève une exception).

    Cet exemple d’extrait de code indique l’utilisation des déclencheurs d’événements système et des notifications Push :

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

Ajouter plusieurs extensions de tâche en arrière-plan

Répétez l’étape 2 pour chaque classe de tâche en arrière-plan supplémentaire inscrite par votre application.

L’exemple suivant est l’élément Application complet de l’exemple de tâche en arrière-plan. Cela montre l’utilisation de 2 classes de tâches en arrière-plan avec un total de 3 types de déclencheurs. Copiez la section Extensions de cet exemple et modifiez-la si nécessaire pour déclarer des tâches en arrière-plan dans votre manifeste d’application.

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

Déclarer l’emplacement d’exécution de votre tâche en arrière-plan

Vous pouvez spécifier l’emplacement d’exécution de vos tâches en arrière-plan :

  • Par défaut, ils s’exécutent dans le processus de BackgroundTaskHost.exe.
  • Dans le même processus que votre application de premier plan.
  • Permet ResourceGroup de placer plusieurs tâches en arrière-plan dans le même processus d’hébergement ou de les séparer en différents processus.
  • Permet SupportsMultipleInstances d’exécuter le processus en arrière-plan dans un nouveau processus qui obtient ses propres limites de ressources (mémoire, processeur) chaque fois qu’un nouveau déclencheur est déclenché.

Exécuter dans le même processus que votre application de premier plan

Voici un exemple XML qui déclare une tâche en arrière-plan qui s’exécute dans le même processus que l’application de premier plan.

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

Lorsque vous spécifiez EntryPoint, votre application reçoit un rappel à la méthode spécifiée lorsque le déclencheur se déclenche. Si vous ne spécifiez pas d’EntréePoint, votre application reçoit le rappel via OnBackgroundActivated(). Pour plus d’informations, consultez Créer et inscrire une tâche en arrière-plan in-process.

Spécifiez l’emplacement d’exécution de votre tâche en arrière-plan avec l’attribut ResourceGroup.

Voici un exemple XML qui déclare une tâche en arrière-plan qui s’exécute dans un processus BackgroundTaskHost.exe, mais dans une instance distincte d’une autre instance de tâches en arrière-plan de la même application. Notez l’attribut ResourceGroup , qui identifie les tâches en arrière-plan qui s’exécutent ensemble.

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

Exécuter dans un nouveau processus chaque fois qu’un déclencheur se déclenche avec l’attribut SupportsMultipleInstances

Cet exemple déclare une tâche en arrière-plan qui s’exécute dans un nouveau processus qui obtient ses propres limites de ressources (mémoire et processeur) chaque fois qu’un nouveau déclencheur est déclenché. Notez l’utilisation dont SupportsMultipleInstances ce comportement est activé. Pour utiliser cet attribut, vous devez cibler la version du SDK « 10.0.15063 » (Mise à jour Windows 10 Créateurs) ou ultérieure.

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

Remarque

Vous ne pouvez pas spécifier ResourceGroup ou ServerName conjointement avec SupportsMultipleInstances.