Richtlinien für Hintergrundaufgaben
Stellen Sie sicher, dass Ihre App die Anforderungen für die Ausführung von Hintergrundaufgaben erfüllt.
Leitfaden für Hintergrundaufgaben
Beachten Sie beim Entwickeln Ihrer Hintergrundaufgabe und vor dem Veröffentlichen Der App die folgenden Anleitungen.
Wenn Sie eine Hintergrundaufgabe zum Wiedergeben von Medien im Hintergrund verwenden, finden Sie Informationen zu Verbesserungen in Windows 10, Version 1607, unter "Wiedergeben von Medien im Hintergrund ", die es wesentlich einfacher machen.
In-Process-Hintergrundaufgaben im Vergleich zu Hintergrundaufgaben außerhalb von Prozessen: Windows 10, Version 1607, eingeführte In-Process-Hintergrundaufgaben , mit denen Sie Hintergrundcode im selben Prozess wie Ihre Vordergrund-App ausführen können. Berücksichtigen Sie die folgenden Faktoren, wenn Sie entscheiden, ob Hintergrundaufgaben außerhalb von Prozessen verwendet werden sollen:
Aspekt | Auswirkung |
---|---|
Resilienz | Wenn der Hintergrundprozess in einem anderen Prozess ausgeführt wird, nimmt ein Absturz im Hintergrundprozess ihre Vordergrundanwendung nicht herunter. Darüber hinaus können Hintergrundaktivitäten auch innerhalb Ihrer App beendet werden, wenn sie über die Ausführungszeitlimits hinausgeht. Das Trennen von Hintergrundaufgaben in eine Aufgabe, die von der Vordergrund-App getrennt ist, kann eine bessere Wahl sein, wenn es nicht erforderlich ist, dass die Vordergrund- und Hintergrundprozesse miteinander kommunizieren müssen (da einer der Hauptvorteile von In-Process-Hintergrundaufgaben besteht darin, dass sie die Notwendigkeit für die Kommunikation zwischen Prozessen entfernen). |
Einfachheit | Hintergrundaufgaben in Prozessen erfordern keine prozessübergreifende Kommunikation und sind weniger komplex zu schreiben. |
Verfügbare Trigger | In-Process-Hintergrundaufgaben unterstützen nicht die folgenden Trigger: DeviceUseTrigger, DeviceServicingTrigger und IoTStartupTask. |
VoIP | In-Process-Hintergrundaufgaben unterstützen die Aktivierung einer VoIP-Hintergrundaufgabe innerhalb Ihrer Anwendung nicht. |
Grenzwerte für die Anzahl der Triggerinstanzen: Es gibt Beschränkungen, wie viele Instanzen einiger Trigger eine App registrieren kann. Eine App kann applicationTrigger, MediaProcessingTrigger und DeviceUseTrigger nur einmal pro Instanz der App registrieren. Wenn eine App diesen Grenzwert überschreitet, löst die Registrierung eine Ausnahme aus.
CPU-Kontingente: Hintergrundaufgaben sind auf die Nutzungszeit der Wanduhr beschränkt, die sie basierend auf dem Triggertyp erhalten. Die meisten Trigger sind auf 30 Sekunden der Wanduhrnutzung beschränkt, während einige die Möglichkeit haben, bis zu 10 Minuten auszuführen, um intensive Aufgaben auszuführen. Hintergrundaufgaben sollten leicht sein, um die Akkulaufzeit zu sparen und eine bessere Benutzererfahrung für Vordergrund-Apps zu bieten. Informationen zu den Ressourceneinschränkungen, die auf Hintergrundaufgaben angewendet werden, finden Sie unter "Unterstützen Ihrer App mit Hintergrundaufgaben ".
Verwalten von Hintergrundaufgaben: Ihre App sollte eine Liste registrierter Hintergrundaufgaben abrufen, sich für Status- und Abschlusshandler registrieren und diese Ereignisse entsprechend behandeln. Ihre Hintergrundaufgabenklassen sollten Fortschritt, Abbruch und Abschluss melden. Weitere Informationen finden Sie unter "Behandeln einer abgebrochenen Hintergrundaufgabe" und "Überwachen des Status und Abschluss der Hintergrundaufgabe".
Verwenden Sie BackgroundTaskDeferral: Wenn Ihre Hintergrundaufgabenklasse asynchronen Code ausführt, stellen Sie sicher, dass Verzögerungsvorgänge verwendet werden. Andernfalls wird die Hintergrundaufgabe möglicherweise vorzeitig beendet, wenn die Run-Methode zurückgegeben wird (oder die OnBackgroundActivated-Methode im Fall von In-Process-Hintergrundaufgaben). Weitere Informationen finden Sie unter Erstellen und Registrieren einer Hintergrundaufgabe außerhalb von Prozessen.
Alternativ können Sie eine Verzögerung anfordern und async/await verwenden, um asynchrone Methodenaufrufe abzuschließen. Schließen Sie die Verzögerung, nachdem die Await-Methode aufgerufen wurde.
Aktualisieren Sie das App-Manifest: Deklarieren Sie für 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 Hintergrundaufgabe zur Laufzeit nicht registrieren.
Wenn Sie über mehrere Hintergrundaufgaben verfügen, überlegen Sie, ob sie im selben Hostprozess ausgeführt werden sollen oder in verschiedene Hostprozesse aufgeteilt werden sollen. Fügen Sie sie in separate Hostprozesse ein, wenn Sie besorgt sind, dass ein Fehler in einer Hintergrundaufgabe andere Hintergrundaufgaben beeinträchtigen könnte. Verwenden Sie den Ressourcengruppeneintrag im Manifest-Designer, um Hintergrundaufgaben in verschiedene Hostprozesse zu gruppieren.
Um die Ressourcengruppe festzulegen, öffnen Sie den Package.appxmanifest-Designer, wählen Sie Deklarationen aus, und fügen Sie eine App Service-Deklaration hinzu:
Weitere Informationen zur Einstellung der Ressourcengruppen finden Sie in der Anwendungsschemareferenz .
Hintergrundaufgaben, die im selben Prozess wie die Vordergrund-App ausgeführt werden, müssen sich nicht im Anwendungsmanifest deklarieren. Weitere Informationen zum Deklarieren von Hintergrundaufgaben, die im Manifest außerhalb des Prozesses ausgeführt werden, finden Sie unter Deklarieren von Hintergrundaufgaben im Anwendungsmanifest.
Vorbereiten auf App-Updates: Wenn Ihre App aktualisiert wird, 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 auszuführen, die außerhalb des Kontexts der Ausführung im Vordergrund erforderlich sein können.
Anforderung zum Ausführen von Hintergrundaufgaben:
Wichtig Ab Windows 10 müssen Apps nicht mehr auf dem Sperrbildschirm sein, um Hintergrundaufgaben auszuführen.
Universelle Windows-Plattform(UWP)-Apps können alle unterstützten Aufgabentypen ausführen, ohne an den Sperrbildschirm angeheftet zu werden. Apps müssen jedoch GetAccessState aufrufen und überprüfen, ob die App nicht im Hintergrund ausgeführt wird. Stellen Sie sicher, dass GetAccessStatus keine der verweigerten BackgroundAccessStatus-Enumerationen zurückgibt. Diese Methode gibt beispielsweise "BackgroundAccessStatus.DeniedByUser" zurück, wenn der Benutzer in den Einstellungen des Geräts explizit die Berechtigungen für Hintergrundaufgaben für Ihre App verweigert hat.
Wenn ihre App nicht im Hintergrund ausgeführt wird, sollte Ihre App RequestAccessAsync aufrufen und sicherstellen, dass die Antwort vor dem Registrieren von Hintergrundaufgaben nicht verweigert wird.
Weitere Informationen zur Benutzerauswahl rund um Hintergrundaktivität und Stromsparmodus finden Sie unter Optimieren der Hintergrundaktivität.
Prüfliste für Hintergrundaufgaben
Gilt sowohl für Hintergrundaufgaben als auch für Hintergrundaufgaben außerhalb von Prozessen
- Ordnen Sie Die Hintergrundaufgabe dem richtigen Trigger zu.
- Fügen Sie Bedingungen hinzu, um sicherzustellen, dass die Hintergrundaufgabe erfolgreich ausgeführt wird.
- Behandeln sie den Fortschritt, den Abschluss und den Abbruch von Hintergrundaufgaben.
- Registrieren Sie Ihre Hintergrundaufgaben während des App-Starts erneut. Dadurch wird sichergestellt, dass sie beim ersten Start der App registriert werden. Außerdem bietet sie eine Möglichkeit, zu erkennen, ob der Benutzer die Hintergrundausführungsfunktionen Ihrer App deaktiviert hat (bei der Registrierung tritt ein Fehler auf).
- Überprüfen Sie, ob Fehler bei der Registrierung von Hintergrundaufgaben auftreten. Versuchen Sie gegebenenfalls, die Hintergrundaufgabe erneut mit unterschiedlichen Parameterwerten zu registrieren.
- Bei allen Gerätefamilien mit Ausnahme des Desktops können Hintergrundaufgaben beendet werden, wenn das Gerät nicht genügend Arbeitsspeicher hat. Wenn eine Ausnahme außerhalb des Arbeitsspeichers nicht angezeigt wird oder die App sie nicht behandelt, wird die Hintergrundaufgabe ohne Warnung und ohne Auslösen des OnCanceled-Ereignisses beendet. Dies trägt dazu bei, die Benutzererfahrung der App im Vordergrund sicherzustellen. Ihre Hintergrundaufgabe sollte so konzipiert sein, dass dieses Szenario behandelt wird.
Gilt nur für Hintergrundaufgaben außerhalb von Prozessen
- Erstellen Sie Ihre Hintergrundaufgabe in einer Windows-Runtime Komponente.
- Zeigen Sie keine anderen Ui-Elemente als Popups, Kacheln und Signalaktualisierungen aus der Hintergrundaufgabe an.
- Fordern Sie in der Run-Methode Verzögerung für jeden asynchronen Methodenaufruf an, und schließen Sie diese, wenn die Methode abgeschlossen ist. Oder verwenden Sie eine Verzögerung mit asynchron/await.
- Verwenden Sie beständigen Speicher, um Daten zwischen der Hintergrundaufgabe und der App freizugeben.
- Deklarieren Sie jede Hintergrundaufgabe im Anwendungsmanifest zusammen mit dem Typ der Trigger, mit denen sie verwendet wird. Stellen Sie sicher, dass der Einstiegspunkt und die Triggertypen korrekt sind.
- 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 In-Process-Hintergrundaufgaben
- Stellen Sie beim Abbrechen einer Aufgabe sicher, dass der
BackgroundActivated
Ereignishandler beendet wird, bevor der Abbruch auftritt oder der gesamte Prozess beendet wird. - Schreiben Sie Hintergrundaufgaben, die kurzlebig sind. Die meisten Hintergrundaufgaben sind auf 30 Sekunden der Verwendung der Wanduhr beschränkt.
Zu vermeidende Dinge
- 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 ausgeführten Zustand, der zu einem Hängen führen kann.
- Ein erheblicher Zeitaufwand könnte dazu aufgewendet werden, die prozessübergreifende Kommunikation zu erleichtern, und wird anhand der Zeit gezählt, die für die Ausführung Ihrer Hintergrundaufgabe vorgesehen ist.
- Verlassen Sie sich nicht auf die Benutzerinteraktion in Hintergrundaufgaben.
Zugehörige Themen
- Erstellen und Registrieren einer Hintergrundaufgabe innerhalb von Prozessen
- Erstellen und Registrieren einer Hintergrundaufgabe außerhalb von Prozessen
- Erstellen und Registrieren einer Winmain-COM-Hintergrundaufgabe
- Deklarieren von Hintergrundaufgaben im Anwendungsmanifest
- Wiedergeben von Medien im Hintergrund
- Behandeln einer abgebrochenen Hintergrundaufgabe
- Überwachen des Status und Abschlusses von Hintergrundaufgaben
- Registrieren einer Hintergrundaufgabe
- Reagieren auf Systemereignisse mit Hintergrundaufgaben
- Festlegen von Bedingungen zum Ausführen einer Hintergrundaufgabe
- Aktualisieren einer Live-Kachel über eine Hintergrundaufgabe
- Verwenden eines Wartungsauslösers
- Ausführen einer Hintergrundaufgabe für einen Timer
- Debuggen einer Hintergrundaufgabe
- Auslösen von Anhalte-, Fortsetzungs- und Hintergrundereignissen in UWP-Apps (beim Debuggen)