Unterstützen Ihrer App mit Hintergrundaufgaben

In den Themen in diesem Abschnitt wird gezeigt, wie Sie einfachen Code im Hintergrund ausführen, um auf Auslöser zu reagieren. Sie können mit Hintergrundaufgaben Funktionen bereitstellen, wenn Ihre App gerade ausgesetzt ist oder nicht ausgeführt wird. Sie können Hintergrundaufgaben auch für Echtzeitkommunikations-Apps wie VOIP, E-Mail und Sofortnachrichten verwenden.

Wiedergeben von Medien im Hintergrund

Ab Windows 10 (Version 1607) ist die Wiedergabe von Audio im Hintergrund sehr viel einfacher. Weitere Informationen finden Sie unter Wiedergeben von Medien im Hintergrund.

Hintergrundaufgaben innerhalb und außerhalb von Prozessen

Es gibt zwei Ansätze zum Implementieren von Hintergrundaufgaben:

  • In-Process: Die App und ihr Hintergrundprozess werden im gleichen Prozess ausgeführt.
  • Out-of-Process: Die App und der Hintergrundprozess werden in separaten Prozessen ausgeführt.

Die Unterstützung für Hintergrundaufgaben innerhalb von Prozessen wurde mit Windows 10 (Version 1607) eingeführt, um das Schreiben von Hintergrundaufgaben zu vereinfachen. Es ist jedoch weiterhin möglich, Hintergrundaufgaben außerhalb von Prozessen zu schreiben. Unter Richtlinien für Hintergrundaufgaben finden Sie Empfehlungen dazu, wann Sie eine Hintergrundaufgabe innerhalb eines Prozesses und wann außerhalb eines Prozesses schreiben sollten.

Out-of-Process-Hintergrundaufgaben sind resilienter, da der Hintergrundprozess Ihren App-Prozess nicht herunterziehen kann, wenn etwas schief geht. Die Resilienz hat jedoch den Preis einer höheren Komplexität, um die prozessübergreifende Kommunikation zwischen der App und der Hintergrundaufgabe zu verwalten.

Out-of-Process-Hintergrundaufgaben werden als einfache Klassen implementiert, die die IBackgroundTask-Schnittstelle implementieren, die das Betriebssystem in einem separaten Prozess (backgroundtaskhost.exe) ausführt. Registrieren Sie eine Hintergrundaufgabe mithilfe der BackgroundTaskBuilder-Klasse . Der Klassenname wird beim Registrieren der Hintergrundaufgabe zum Angeben des Einstiegspunkts verwendet.

In Windows 10 (Version 1607) können Sie Hintergrundaktivitäten aktivieren, ohne eine Hintergrundaufgabe zu erstellen. Sie können ihren Hintergrundcode stattdessen direkt im Prozess der Vordergrundanwendung ausführen.

Erste Schritte für das schnelle Erstellen von Hintergrundaufgaben finden Sie unter Erstellen und Registrieren einer Hintergrundaufgabe innerhalb von Prozessen.

Erste Schritte für das schnelle Erstellen von Hintergrundaufgaben außerhalb von Prozessen finden Sie unter Erstellen und Registrieren einer Hintergrundaufgabe außerhalb von Prozessen.

Tipp

 Ab Windows 10 müssen Sie eine App nicht mehr auf dem Sperrbildschirm platzieren, damit eine Hintergrundaufgabe dafür registriert werden kann.

Hintergrundaufgaben für Systemereignisse

Ihre App kann auf Systemereignisse reagieren, indem mit der SystemTrigger-Klasse eine Hintergrundaufgabe registriert wird. Eine App kann einen der folgenden Systemereignistrigger verwenden (definiert in SystemTriggerType).

Triggername Beschreibung
InternetAvailable Das Internet wird verfügbar.
NetworkStateChange Eine Netzwerkänderung findet statt, z. B. werden die Kosten oder Verbindungsoptionen geändert.
OnlineIdConnectedStateChange Die mit dem Konto verbundene Online-ID wird geändert.
SmsReceived Auf einem installierten mobilen Breitbandgerät geht eine SMS ein.
TimeZoneChange Die Zeitzone auf dem Gerät ändert sich (z. B. wenn das System die Uhrzeit auf die Sommerzeit umstellt).

Weitere Informationen finden Sie unter Reagieren auf Systemereignisse mit Hintergrundaufgaben.

Bedingungen für Hintergrundaufgaben

Über Bedingungen können Sie steuern, wann die Hintergrundaufgabe ausgeführt wird, auch nachdem sie ausgelöst wurde. Nach dem Auslösen wird die Hintergrundaufgabe erst ausgeführt, wenn alle ihre Bedingungen erfüllt sind. Sie können die folgenden Bedingungen verwenden (dargestellt durch die SystemConditionType-Enumeration).

Bedingungsname Beschreibung
InternetAvailable Das Internet muss verfügbar sein.
InternetNotAvailable Das Internet darf nicht verfügbar sein.
SessionConnected Die Sitzung muss verbunden sein.
SessionDisconnected Die Sitzung darf nicht verbunden sein.
UserNotPresent Der Benutzer muss abwesend sein.
UserPresent Der Benutzer muss anwesend sein.

Fügen Sie die InternetAvailable-Bedingung zur Hintergrundaufgabe BackgroundTaskBuilder.AddCondition hinzu, um die Hintergrundaufgabe zu verzögern, bis der Netzwerkstapel ausgeführt wird. Diese Bedingung spart Strom, da die Hintergrundaufgabe erst ausgeführt wird, wenn das Netzwerk verfügbar ist. Dieser Zustand stellt keine Aktivierung in Echtzeit bereit.

Wenn ihre Hintergrundaufgabe Netzwerkkonnektivität erfordert, legen Sie IsNetworkRequested fest, um sicherzustellen, dass das Netzwerk während der Ausführung des Hintergrundtasks aktiviert bleibt. Dies weist die Infrastruktur für Hintergrundaufgaben an, die Netzwerkverbindung für die Ausführung der Aufgabe auch dann beizubehalten, wenn sich das Gerät im verbundenen Standbymodus befindet. Wenn Ihre Hintergrundaufgabe IsNetworkRequested nicht festgelegt hat, kann Ihre Hintergrundaufgabe nicht auf das Netzwerk zugreifen, wenn sie sich im Modus "Verbundener Standbymodus" befindet (z. B. wenn der Bildschirm eines Telefons ausgeschaltet ist). Weitere Informationen zu Hintergrundaufgabenbedingungen finden Sie unter Festlegen von Bedingungen zum Ausführen einer Hintergrundaufgabe.

Anforderungen für das Anwendungsmanifest

Damit Ihre App eine Hintergrundaufgabe registrieren kann, die außerhalb eines Prozesses ausgeführt wird, muss sie im Anwendungsmanifest deklariert werden. Hintergrundaufgaben, die im gleichen Prozess wie ihre Host-App ausgeführt werden, müssen nicht im Anwendungsmanifest deklariert werden. Weitere Informationen finden Sie unter Deklarieren von Hintergrundaufgaben im Anwendungsmanifest.

Hintergrundaufgaben

Die folgenden Echtzeitauslöser können verwendet werden, um einfachen benutzerdefinierten Code im Hintergrund auszuführen:

Echtzeitauslöser Beschreibung
Steuerkanal Hintergrundaufgaben können eine Verbindung aufrechterhalten und Nachrichten auf dem Steuerkanal mithilfe des ControlChannelTrigger empfangen. Wenn Ihre App ein Socket überwacht, können Sie den Socketbroker statt ControlChannelTrigger verwenden. Weitere Informationen zur Verwendung der Socketbroker finden Sie unter SocketActivityTrigger. ControlChannelTrigger wird unter Windows Phone nicht unterstützt.
Zeitgeber Hintergrundaufgaben können in einem Intervall von bis zu 15 Minuten ausgeführt werden, und sie können mithilfe des TimeTrigger auf die Ausführung zu einer bestimmten Zeit festgelegt werden. Weitere Informationen finden Sie im Thema Ausführen einer Hintergrundaufgabe mit einem Timer.
Pushbenachrichtigung Hintergrundaufgaben reagieren auf den PushNotificationTrigger, um unformatierte Pushbenachrichtigungen zu empfangen.

Hinweis  

Universelle Windows-Apps müssen jedoch RequestAccessAsync aufrufen, bevor Hintergrundtrigger-Typen registriert werden.

Rufen Sie RemoveAccess und anschließend RequestAccessAsync auf, wenn die App nach der Aktualisierung gestartet wird, um sicherzustellen, dass Ihre universelle Windows-App nach der Veröffentlichung eines Updates weiterhin ordnungsgemäß ausgeführt wird. Weitere Informationen finden Sie unter Richtlinien für Hintergrundaufgaben.

Grenzwerte für die Anzahl der Triggerinstanzen: Es gibt Einschränkungen für die Anzahl der Instanzen einiger Trigger, die 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.

Systemereignistrigger

Die SystemTriggerType-Enumeration stellt die folgenden Systemereignistrigger dar:

Triggername Beschreibung
UserPresent Die Hintergrundaufgabe wird ausgelöst, wenn der Benutzer anwesend ist.
UserAway Die Hintergrundaufgabe wird ausgelöst, wenn der Benutzer abwesend ist.
ControlChannelReset Die Hintergrundaufgabe wird ausgelöst, wenn ein Steuerkanal zurückgesetzt wird.
SessionConnected Die Hintergrundaufgabe wird ausgelöst, wenn die Sitzung eine Verbindung herstellt.

  Das folgende Systemereignis löst ein Signal aus, wenn der Benutzer eine App auf den oder aus dem Sperrbildschirm verschoben hat.

Triggername Beschreibung
LockScreenApplicationAdded Dem Sperrbildschirm wird eine App-Kachel hinzugefügt.
LockScreenApplicationRemoved Eine App-Kachel wird vom Sperrbildschirm entfernt.

 

Ressourcenbeschränkungen für Hintergrundaufgaben

Hintergrundaufgaben sind einfach. Beschränken Sie die Ausführung von Hintergrundaufgaben auf ein Minimum, um die beste Benutzererfahrung für Vordergrund-Apps und Akkulaufzeit sicherzustellen. Dies wird erzwungen, indem auf Hintergrundaufgaben Ressourcenbeschränkungen angewendet werden.

Hintergrundaufgaben sind auf 30 Sekunden der Gesamtbetrachtungszeit beschränkt.

Arbeitsspeicherbeschränkungen

Aufgrund der Ressourcenbeschränkungen für Geräte mit wenig Arbeitsspeicher kann für Hintergrundaufgaben ein Arbeitsspeicherlimit gelten. Dieses gibt die maximale Menge von Arbeitsspeicher an, der von der Hintergrundaufgabe verwendet werden kann. Wenn die Hintergrundaufgabe einen Vorgang ausführt, der dieses Limit überschreiten würde, tritt ein Fehler und ggf. eine Ausnahme über zu wenig Arbeitsspeicher auf, die von der Aufgabe behandelt werden kann. Wenn die Ausnahme über wenig Arbeitsspeicher von der Aufgabe nicht behandelt wird oder eine solche Ausnahme je nach Vorgang überhaupt nicht generiert wird, wird die Aufgabe sofort beendet.

Sie können die MemoryManager-APIs verwenden, um durch Abfrage von aktueller Speicherauslastung und Limit die Obergrenze (falls vorhanden) zu ermitteln und die fortlaufende Speichernutzung der Hintergrundaufgabe zu überwachen.

Limit pro Gerät für Apps mit Hintergrundaufgaben für Geräte mit wenig Arbeitsspeicher

Geräte mit beschränktem Arbeitsspeicher haben ein Limit für die Anzahl von Apps, die gleichzeitig auf einem Gerät installierbar sind und Hintergrundaufgaben nutzen können. Wenn diese Zahl überschritten wird, tritt für den Aufruf von RequestAccessAsync, der zum Registrieren aller Hintergrundaufgaben erforderlich ist, ein Fehler auf.

Stromsparmodus

Solange Sie die App nicht davon befreien, bei aktiviertem Stromsparmodus Hintergrundaufgaben auszuführen und Pushbenachrichtigungen zu empfangen, verhindert der Stromsparmodus (falls aktiviert) die Ausführung von Hintergrundaufgaben, falls das Gerät nicht mit einer externen Stromquelle verbunden ist und der Akku eine angegebene Restmenge unterschreitet. Sie können Hintergrundaufgaben aber weiterhin registrieren.

Für Unternehmens-Apps und Apps, die nicht im Microsoft Store veröffentlicht werden, finden Sie unter Unbegrenzt im Hintergrund ausführen informationen dazu, wie Sie eine Funktion verwenden, um eine Hintergrundaufgabe oder eine erweiterte Ausführungssitzung im Hintergrund unbegrenzt auszuführen.

Die Ressourcen für Hintergrundaufgabe erlauben die Kommunikation in Echtzeit.

Um zu verhindern, dass Ressourcenkontingente die Echtzeitkommunikation stören, erhalten Hintergrundaufgaben, die den ControlChannelTrigger und den PushNotificationTrigger verwenden, garantierte Ressourcenkontingente (CPU) für jede ausgeführte Aufgabe. Die Ressourcenkontingente sind wie oben erwähnt und bleiben für diese Hintergrundaufgaben unverändert.

Ihre App benötigt keine anderen Funktionen, um die garantierten Ressourcenkontingente für ControlChannelTrigger- und PushNotificationTrigger-Hintergrundaufgaben zu erhalten. Das System behandelt sie immer als kritische Hintergrundaufgaben.

Wartungsauslöser

Wartungsaufgaben werden nur ausgeführt, wenn das Gerät an die Stromversorgung angeschlossen ist. Weitere Informationen finden Sie unter Verwenden eines Wartungstriggers.

Hintergrundaufgaben für Sensoren und Geräte

Ihre App kann über eine Hintergrundaufgabe mit der DeviceUseTrigger-Klasse auf Sensoren und Peripheriegeräte zugreifen. Dieser Auslöser ist für zeitaufwändige Vorgänge wie Datensynchronisierung oder Überwachung geeignet. Im Gegensatz zu Aufgaben für Systemereignisse kann eine DeviceUseTrigger-Aufgabe nur ausgelöst werden, wenn Ihre App im Vordergrund ausgeführt wird, und es können keine Bedingungen festgelegt werden.

Wichtig

DeviceUseTrigger und DeviceServicingTrigger können nicht für prozessinterne Hintergrundaufgaben verwendet werden.

Einige kritische Gerätevorgänge (wie etwa zeitaufwändige Firmwareupdates) können mithilfe von DeviceUseTrigger nicht durchgeführt werden. Diese Vorgänge können nur auf dem PC und nur von einer privilegierten App durchgeführt werden, für die DeviceServicingTrigger verwendet wird. Eine privilegierte App ist eine App, die vom Gerätehersteller dafür autorisiert wurde, diese Vorgänge auszuführen. Mithilfe von Metadaten wird angegeben, welche App, falls zutreffend, als privilegierte App für ein Gerät festgelegt wurde. Weitere Informationen finden Sie unter Gerätesynchronisierung und -update für Microsoft Store Geräte-Apps.

Verwalten von Hintergrundaufgaben

Hintergrundaufgaben können mit Ereignissen und lokalem Speicher Fortschritt, Beendigung und Abbruch an die App melden. Eine App kann außerdem die von einer Hintergrundaufgabe ausgelösten Ausnahmen auffangen und die Registrierung von Hintergrundaufgaben während eines App-Updates verwalten. Weitere Informationen finden Sie unter:

Behandeln einer abgebrochenen Hintergrundaufgabe
Überwachen des Status und Abschlusses von Hintergrundaufgaben

Überprüfen Sie die Registrierung Ihrer Hintergrundaufgabe während des App-Starts. Stellen Sie sicher, dass die nicht gruppierten Hintergrundaufgaben Ihrer App in BackgroundTaskBuilder.AllTasks vorhanden sind. Registrieren Sie diejenigen erneut, die nicht vorhanden sind. Aufheben der Registrierung von Aufgaben, die nicht mehr benötigt werden. Dadurch wird sichergestellt, dass alle Registrierungen von Hintergrundaufgaben bei jedem Start der App auf dem neuesten Stand sind.

Konzeptionelle Richtlinien für Multitasking in Windows 10

Ratschläge für zugehörige Hintergrundaufgaben