Richtlinien für Hintergrundaufgaben

Stellen Sie sicher, dass Ihre App die Anforderungen für die Ausführung von Hintergrundaufgaben erfüllt.

Ratschläge zu Hintergrundaufgaben

Beachten Sie beim Entwickeln Ihrer Hintergrundaufgabe und vor dem Veröffentlichen Ihrer App die folgenden Empfehlungen.

Wenn Sie eine Hintergrundaufgabe zur Medienwiedergabe im Hintergrund verwenden, finden Sie unter Wiedergeben von Medien im Hintergrund Informationen zu Verbesserungen in Windows 10, Version 1607, die dies erleichtern.

Hintergrundaufgaben innerhalb von Prozessen im Vergleich zu Hintergrundaufgaben außerhalb von Prozessen: Mit Windows 10, Version 1607, wurden Hintergrundaufgaben innerhalb von Prozessen eingeführt. Dadurch kann Hintergrundcode im selben Prozess ausgeführt werden wie die Vordergrund-App. Beachten Sie bei der Entscheidung für Hintergrundaufgaben innerhalb oder außerhalb von Prozessen folgende Faktoren:

Aspekt Auswirkungen
Resilienz Wenn der Hintergrundprozess in einem anderen Prozess ausgeführt wird, hat ein Absturz im Hintergrundprozess keine Auswirkungen auf Ihre Vordergrund-Anwendung. Außerdem kann die Hintergrundaktivität beendet werden, sogar innerhalb Ihrer App, wenn Ausführungszeitlimits überschritten werden. Das Trennen der Hintergrundarbeit in eine Aufgabe separat von der Vordergrund-App ist möglicherweise die bessere Wahl, wenn Vordergrund- und Hintergrundprozess nicht miteinander kommunizieren müssen (ein wesentlicher Vorteil von Hintergrundaufgaben innerhalb von Prozessen ist nämlich der, dass keine Kommunikation zwischen Prozessen erforderlich ist).
Einfachheit Hintergrundaufgaben innerhalb von Prozessen erfordern keine prozessübergreifende Kommunikation und sind einfacher zu schreiben.
Verfügbare Trigger Hintergrundaufgaben innerhalb von Prozessen unterstützen nicht die folgenden Trigger: DeviceUseTrigger, DeviceServicingTrigger und IoTStartupTask
VoIP Hintergrundaufgaben innerhalb von Prozessen unterstützen nicht die Aktivierung einer VoIP-Hintergrundaufgabe in Ihrer Anwendung.

Grenzwerte für die Anzahl von Triggerinstanzen: Es gibt Grenzwerte für die Anzahl von Instanzen einiger Trigger, die eine App registrieren kann. Eine App kann ApplicationTrigger, MediaProcessingTrigger und DeviceUseTrigger nur einmal pro instance der App registrieren. Wenn eine App diesen Grenzwert überschreitet, löst die Registrierung eine Ausnahme aus.

CPU-Kontingente: Hintergrundaufgaben sind durch die Gesamtbetrachtungszeit eingeschränkt, die ihnen basierend auf dem Triggertyp zugeteilt wird. Die meisten Trigger sind auf 30 Sekunden der Gesamtbetrachtungszeit beschränkt. Einige können jedoch bis zu 10 Minuten ausgeführt werden, um rechenintensive Aufgaben abschließen zu können. Hintergrundaufgaben sollten klein bleiben, um den Akku zu schonen und ein besseres Benutzererlebnis für die Apps im Vordergrund zu ermöglichen. Die für Hintergrundaufgaben geltenden Ressourcenbeschränkungen finden Sie unter Unterstützen der App mit Hintergrundaufgaben.

Verwalten von Hintergrundaufgaben: Ihre App sollte eine Liste registrierter Hintergrundaufgaben abrufen, sich für Fortschritts- und Vervollständigungshandler registrieren und diese Ereignisse entsprechend behandeln. Ihre Hintergrundaufgabenklassen müssen Fortschritt, Abbruch und Abschluss berichten. Weitere Informationen finden Sie unter Behandeln einer abgebrochenen Hintergrundaufgabe und Überwachen des Status und Der Abschluss von Hintergrundaufgaben.

Verwenden Sie BackgroundTaskDeferral: Wenn Ihre Hintergrundaufgabenklasse asynchronen Code ausführt, stellen Sie sicher, dass Zurückstellungen verwendet werden. Andernfalls kann Ihre Hintergrundaufgabe vorzeitig beendet werden, wenn die Run-Methode zurückgibt (oder die OnBackgroundActivated-Methode im Fall von prozessinternen Hintergrundaufgaben). Weitere Informationen finden Sie unter Erstellen und Registrieren einer Hintergrundaufgabe außerhalb von Prozessen.

Alternativ können Sie eine Verzögerung bewirken und asynchrone Methodenaufrufe mit async/await abschließen. Schließen Sie die Verzögerung nach den await-Methodenaufrufen.

Aktualisieren Sie das App-Manifest: Deklarieren Sie bei Hintergrundaufgaben, die außerhalb des Prozesses ausgeführt werden, jede Hintergrundaufgabe im Anwendungsmanifest zusammen mit dem Typ der Trigger, mit denen sie verwendet wird. Andernfalls kann Ihre App die Hintergrundaufgaben zur Laufzeit nicht registrieren.

Wenn Sie über mehrere Hintergrundaufgaben verfügen, sollten Sie überlegen, ob sie im selben Hostprozess ausgeführt oder in unterschiedliche Hostprozesse unterteilt werden sollen. Fügen Sie sie in separate Hostprozesse ein, wenn Sie befürchten, dass ein Fehler in einer Hintergrundaufgabe andere Hintergrundaufgaben beeinträchtigen könnte. Verwenden Sie den Eintrag Ressourcengruppe im Manifest-Designer, um Hintergrundaufgaben in verschiedenen Hostprozessen zu gruppieren.

Öffnen Sie zum Festlegen der Ressourcengruppe den Designer Package.appxmanifest, wählen Sie Deklarationen aus, und fügen Sie eine App Service Deklaration hinzu:

Ressourcengruppeneinstellung

Weitere Informationen zur Ressourcengruppeneinstellung finden Sie in der Anwendungsschemareferenz .

Hintergrundaufgaben, die im gleichen Prozess wie die Vordergrund-App ausgeführt werden, müssen sich im Anwendungsmanifest nicht selbst deklarieren. Weitere Informationen zum Deklarieren von Hintergrundaufgaben außerhalb von Prozessen, die in einem separaten Prozess im Manifest ausgeführt werden, finden Sie unter Deklarieren von Hintergrundaufgaben im Anwendungsmanifest.

Vorbereiten von App-Updates: Wenn Ihre App aktualisiert werden soll, erstellen und registrieren Sie eine ServicingComplete-Hintergrundaufgabe (siehe SystemTriggerType), um die Registrierung von Hintergrundaufgaben für die vorherige Version der App aufzuheben und die Hintergrundaufgaben für die neue Version zu registrieren. Dies ist auch ein geeigneter Zeitpunkt, um App-Updates durchzuführen, die möglicherweise außerhalb des Kontexts der Ausführung im Vordergrund erforderlich sind.

Anfordern der Ausführung von Hintergrundaufgaben:

Wichtig Ab Windows 10 müssen sich Apps nicht mehr auf dem Sperrbildschirm befinden, um Hintergrundaufgaben auszuführen.

UWP (Universelle Windows-Plattform)-Apps können alle unterstützten Aufgabentypen ausführen, ohne auf dem Sperrbildschirm angeheftet zu sein. Apps müssen jedoch GetAccessState aufrufen und überprüfen, ob die Ausführung der App im Hintergrund nicht verweigert wird. Stellen Sie sicher, dass GetAccessStatus keine der abgelehnten BackgroundAccessStatus-Enumerationen zurückgibt. Diese Methode gibt beispielsweise BackgroundAccessStatus.DeniedByUser zurück, wenn der Benutzer die Berechtigungen für Hintergrundaufgaben für Ihre App in den Geräteeinstellungen explizit verweigert hat.

Wenn die Ausführung Ihrer App im Hintergrund verweigert wird, sollte Ihre App RequestAccessAsync aufrufen und sicherstellen, dass die Antwort nicht verweigert wird, bevor Sie Hintergrundaufgaben registrieren.

Weitere Informationen zur Benutzerauswahl rund um Hintergrundaktivität und Akkusparmodus finden Sie unter Optimieren der Hintergrundaktivität.

Prüfliste für Hintergrundaufgaben

Gilt sowohl für Hintergrundaufgaben innerhalb als auch außerhalb von Prozessen

  • Verknüpfen Sie Ihre Hintergrundaufgabe mit dem korrekten Trigger.
  • Fügen Sie Bedingungen hinzu, die für das erfolgreiche Ausführen Ihrer Hintergrundaufgabe sorgen.
  • Behandeln Sie Status, Abschluss und Abbruch von Hintergrundaufgaben.
  • Registrieren Sie Ihre Hintergrundaufgaben während des App-Starts erneut. Dadurch wird sichergestellt, dass sie beim ersten Start der App registriert sind. Zudem können Sie mit dieser Methode feststellen, ob der Benutzer die Ausführung von Hintergrundaufgaben in Ihrer App deaktiviert hat (falls die Registrierung fehlschlägt)
  • Prüfen Sie Ihre App auf Fehler bei der Registrierung von Hintergrundaufgaben. Führen Sie die Registrierung der Hintergrundaufgabe ggf. mit anderen Parameterwerten erneut durch.
  • Für alle Gerätefamilien mit Ausnahme von Desktops können Hintergrundaufgaben beendet werden, wenn der Arbeitsspeicher des Geräts knapp wird. Wenn eine Ausnahme über wenig Arbeitsspeicher nicht angezeigt oder von der App nicht behandelt wird, wird die Hintergrundaufgabe ohne Warnung und ohne Auslösen des OnCanceled-Ereignisses beendet. Dadurch soll die Benutzerfreundlichkeit der App im Vordergrund sichergestellt werden. Entwerfen Sie die Hintergrundaufgabe so, dass dieses Szenario behandelt werden kann.

Gilt nur für Hintergrundaufgaben außerhalb von Prozessen

  • Erstellen Sie Ihre Hintergrundaufgabe in einer Windows-Runtime Komponente.
  • Zeigen Sie keine UI außer Popup-, Kachel- und Signalupdates von der Hintergrundaufgabe an.
  • Fordern Sie in der Run-Methode Verzögerungen für jeden asynchronen Methodenaufruf an, und schließen Sie diese, wenn die Methode abgeschlossen wurde. Oder verwenden Sie eine Verzögerung mit async/await.
  • Verwenden Sie den dauerhaften Speicher, um Daten für die Hintergrundaufgabe und die App freizugeben.
  • Deklarieren Sie jede Hintergrundaufgabe im Anwendungsmanifest zusammen mit dem Triggertyp, mit dem sie verwendet wird. Überprüfen Sie die Korrektheit von Einstiegspunkten und Triggertypen.
  • Geben Sie kein ausführbares Element im Manifest an, es sei denn, Sie verwenden einen Trigger, der im gleichen Kontext wie die App ausgeführt werden soll (z. B. ControlChannelTrigger).

Gilt nur für Hintergrundaufgaben innerhalb von Prozessen

  • Stellen Sie beim Abbrechen einer Aufgabe sicher, dass der BackgroundActivated-Ereignishandler vorhanden ist, bevor der Abbruch eintritt, oder der gesamte Prozess wird beendet.
  • Schreiben Sie Hintergrundaufgaben mit kurzer Laufzeit. Die meisten Hintergrundaufgaben sind auf 30 Sekunden der Wanduhrnutzung beschränkt.

Dinge, die Sie vermeiden sollten

  • Minimieren Sie die Verwendung der prozessübergreifenden Kommunikation über COM oder RPC.
  • Der Prozess, mit dem Sie kommunizieren möchten, befindet sich möglicherweise nicht in einem ausführungsbehafteten Zustand, was zu einem Hängenbleiben führen kann.
  • Ein erheblicher Zeitaufwand für die prozessübergreifende Kommunikation kann mit der für die Ausführung Ihrer Hintergrundaufgabe vorgesehenen Zeit gerechnet werden.
  • Verlassen Sie sich bei Hintergrundaufgaben nicht auf Benutzerinteraktionen.