Deklarieren von Hintergrundaufgaben im Anwendungsmanifest

Wichtige APIs

Sie können die Verwendung von Hintergrundaufgaben aktivieren, indem Sie diese im App-Manifest als Erweiterungen deklarieren.

Wichtig

Dieser Artikel ist spezifisch für Hintergrundaufgaben außerhalb von Prozessen. In-Process-Hintergrundaufgaben werden nicht im Manifest deklariert.

Hintergrundaufgaben außerhalb von Prozessen müssen im App-Manifest deklariert werden, sonst kann Ihre App sie nicht registrieren (eine Ausnahme wird ausgelöst). Darüber hinaus müssen Hintergrundaufgaben außerhalb von Prozessen im Anwendungsmanifest deklariert werden, um die Zertifizierung zu bestehen.

In diesem Thema wird davon ausgegangen, dass Sie eine oder mehrere Hintergrundaufgabenklassen erstellt haben und dass ihre App jede Hintergrundaufgabe registriert, die als Reaktion auf mindestens einen Trigger ausgeführt werden soll.

Manuelles Hinzufügen von Erweiterungen

Öffnen Sie das Anwendungsmanifest (Package.appxmanifest), und wechseln Sie zum Application-Element. Erstellen Sie ein Extensions-Element (sofern noch nicht vorhanden).

Der folgende Codeausschnitt stammt aus dem Beispiel für hintergrundaufgaben:

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

Hinzufügen einer Hintergrundaufgabenerweiterung

Deklarieren Sie Ihre erste Hintergrundaufgabe.

Kopieren Sie diesen Code in das Extensions-Element (Sie fügen Attribute in den folgenden Schritten hinzu).

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="">
      <BackgroundTasks>
        <Task Type="" />
      </BackgroundTasks>
    </Extension>
</Extensions>
  1. Ändern Sie das EntryPoint-Attribut so, dass die gleiche Zeichenfolge wie der Einstiegspunkt beim Registrieren der Hintergrundaufgabe (namespace.classname) verwendet wird.

    In diesem Beispiel ist der Einstiegspunkt ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName:

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ExampleBackgroundTaskClassName">
       <BackgroundTasks>
         <Task Type="" />
       </BackgroundTasks>
    </Extension>
</Extensions>
  1. Ändern Sie die Liste des Aufgabentyp-Attributs, um den Typ der Aufgabenregistrierung anzugeben, der mit dieser Hintergrundaufgabe verwendet wird. Wenn die Hintergrundaufgabe mit mehreren Triggertypen registriert ist, fügen Sie zusätzliche Aufgabenelemente und Type-Attribute für jede hinzu.

    Beachten Sie , dass Sie alle verwendeten Triggertypen auflisten, oder die Hintergrundaufgabe wird nicht bei den nicht deklarierten Triggertypen registriert (die Register-Methode schlägt fehl und löst eine Ausnahme aus).

    In diesem Codeausschnittbeispiel wird die Verwendung von Systemereignistriggern und Pushbenachrichtigungen angegeben:

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

Hinzufügen mehrerer Hintergrundaufgabenerweiterungen

Wiederholen Sie Schritt 2 für jede zusätzliche Hintergrundaufgabenklasse, die von Ihrer App registriert wurde.

Das folgende Beispiel ist das vollständige Application-Element aus dem Hintergrundaufgabenbeispiel. Dies zeigt die Verwendung von 2 Hintergrundaufgabenklassen mit insgesamt 3 Triggertypen. Kopieren Sie den Abschnitt "Erweiterungen" dieses Beispiels, und ändern Sie ihn nach Bedarf, um Hintergrundaufgaben im Anwendungsmanifest zu deklarieren.

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

Deklarieren, wo die Hintergrundaufgabe ausgeführt wird

Sie können angeben, wo Ihre Hintergrundaufgaben ausgeführt werden:

  • Standardmäßig werden sie im BackgroundTaskHost.exe Prozess ausgeführt.
  • Im selben Prozess wie die Vordergrundanwendung.
  • Wird verwendet ResourceGroup , um mehrere Hintergrundaufgaben in denselben Hostingprozess zu platzieren oder sie in verschiedene Prozesse zu trennen.
  • Wird SupportsMultipleInstances verwendet, um den Hintergrundprozess in einem neuen Prozess auszuführen, der bei jedem Auslösen eines neuen Triggers eigene Ressourcenbeschränkungen (Arbeitsspeicher, CPU) abruft.

Führen Sie denselben Prozess wie die Vordergrundanwendung aus.

Im folgenden Beispiel-XML wird eine Hintergrundaufgabe deklariert, die im selben Prozess wie die Vordergrundanwendung ausgeführt wird.

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

Wenn Sie EntryPoint angeben, empfängt Ihre Anwendung einen Rückruf an die angegebene Methode, wenn der Trigger ausgelöst wird. Wenn Sie keinen EntryPoint angeben, empfängt Ihre Anwendung den Rückruf über OnBackgroundActivated(). Ausführliche Informationen finden Sie unter Erstellen und Registrieren einer Hintergrundaufgabe im Prozess.

Geben Sie an, wo die Hintergrundaufgabe mit dem ResourceGroup-Attribut ausgeführt wird.

Im Folgenden sehen Sie ein Beispiel-XML, das eine Hintergrundaufgabe deklariert, die in einem BackgroundTaskHost.exe Prozess ausgeführt wird, jedoch in einer separaten als andere Instanzen von Hintergrundaufgaben aus derselben App. Beachten Sie das ResourceGroup Attribut, das angibt, welche Hintergrundaufgaben zusammen ausgeführt werden.

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

Jedes Mal, wenn ein Trigger ausgelöst wird, in einem neuen Prozess mit dem Attribut "SupportsMultipleInstances" ausgeführt

In diesem Beispiel wird eine Hintergrundaufgabe deklariert, die in einem neuen Prozess ausgeführt wird, der bei jedem Auslösen eines neuen Triggers eigene Ressourcengrenzwerte (Arbeitsspeicher und CPU) abruft. Beachten Sie, welche Verwendung SupportsMultipleInstances dieses Verhaltens ermöglicht. Um dieses Attribut zu verwenden, müssen Sie auf die SDK-Version "10.0.15063" (Windows 10 Creators Update) oder höher abzielen.

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

Hinweis

Sie können nicht angeben ResourceGroup oder ServerName in Verbindung mit SupportsMultipleInstances.