Freigeben über


Unterstützen Ihrer App mit Hintergrundaufgaben

In den Themen in diesem Abschnitt erfahren Sie, wie Sie einfachen Code als Reaktion auf Trigger im Hintergrund ausführen. Sie können Hintergrundaufgaben verwenden, um Funktionen bereitzustellen, wenn Ihre App angehalten oder nicht ausgeführt wird. Sie können Hintergrundaufgaben auch für Echtzeitkommunikations-Apps wie VOIP, E-Mail und Chat verwenden.

Wiedergeben von Medien im Hintergrund

Ab Windows 10, Version 1607, ist die Wiedergabe von Audio im Hintergrund viel einfacher. Weitere Informationen finden Sie unter "Medien wiedergeben" im Hintergrund .

In-Process- und Out-of-Process-Hintergrundaufgaben

Es gibt zwei Ansätze für die Implementierung von Hintergrundaufgaben:

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

In-Process-Hintergrundunterstützung wurde in Windows 10, Version 1607, eingeführt, um das Schreiben von Hintergrundaufgaben zu vereinfachen. Sie können jedoch weiterhin Hintergrundaufgaben außerhalb von Prozessen schreiben. Unter "Richtlinien für Hintergrundaufgaben" finden Sie Empfehlungen dazu, wann eine Hintergrundaufgabe außerhalb des Prozesses geschrieben werden soll.

Hintergrundaufgaben außerhalb von Prozessen sind stabiler, da der Hintergrundprozess Den App-Prozess nicht heruntersetzen kann, wenn ein Fehler auftritt. Die Resilienz kommt jedoch zum Preis einer größeren Komplexität, um die prozessübergreifende Kommunikation zwischen der App und der Hintergrundaufgabe zu verwalten.

Hintergrundaufgaben außerhalb von Prozessen werden als einfache Klassen implementiert, die die IBackgroundTask-Schnittstelle implementieren, die vom Betriebssystem in einem separaten Prozess ausgeführt wird (backgroundtaskhost.exe). Registrieren Sie eine Hintergrundaufgabe mithilfe der BackgroundTaskBuilder-Klasse. Der Klassenname wird verwendet, um den Einstiegspunkt anzugeben, wenn Sie die Hintergrundaufgabe registrieren.

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

Informationen zu den ersten Schritten mit In-Process-Hintergrundaufgaben finden Sie unter Erstellen und Registrieren einer In-Process-Hintergrundaufgabe.

Informationen zu den ersten Schritten mit 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 als Voraussetzung für die Registrierung einer Hintergrundaufgabe auf dem Sperrbildschirm platzieren.

Hintergrundaufgaben für Systemereignisse

Ihre App kann auf vom System generierte Ereignisse reagieren, indem sie eine Hintergrundaufgabe bei der SystemTrigger-Klasse registrieren. Eine App kann einen der folgenden Systemereignistrigger verwenden (definiert in SystemTriggerType)

Triggername Beschreibung
InternetAvailable Das Internet wird verfügbar.
NetworkStateChange Eine Netzwerkänderung, z. B. eine Änderung der Kosten oder Konnektivität, tritt auf.
OnlineIdConnectedStateChange Die Online-ID, die mit den Kontoänderungen verknüpft ist.
SmsReceived Eine neue SMS-Nachricht wird von einem installierten mobilen Breitbandgerät empfangen.
TimeZoneChange Die Zeitzone ändert sich auf dem Gerät (z. B. wenn das System die Uhr für Sommerzeit anpasst).

Weitere Informationen finden Sie unter Reagieren auf Systemereignisse mit Hintergrundaufgaben.

Bedingungen für Hintergrundaufgaben

Sie können steuern, wann die Hintergrundaufgabe ausgeführt wird, auch nachdem sie ausgelöst wurde, indem Sie eine Bedingung hinzufügen. Nach dem Auslösen wird eine Hintergrundaufgabe erst ausgeführt, wenn alle zugehörigen Bedingungen erfüllt sind. Die folgenden Bedingungen (dargestellt durch die SystemConditionType-Aufzählung ) können verwendet werden.

Bedingungsname Beschreibung
InternetAvailable Das Internet muss verfügbar sein.
InternetNotAvailable Das Internet muss nicht verfügbar sein.
SessionConnected Die Sitzung muss verbunden sein.
SessionDisconnected Die Sitzung muss getrennt werden.
UserNotPresent Der Benutzer muss abwesend sein.
UserPresent Der Benutzer muss vorhanden 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 Energie, 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 der Hintergrundaufgabe auf dem Netzwerk 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 im Modus "Verbundener Standbymodus" (z. B. wenn der Bildschirm eines Telefons deaktiviert ist).) Weitere Informationen zu Bedingungen für Hintergrundaufgaben finden Sie unter Festlegen von Bedingungen zum Ausführen einer Hintergrundaufgabe.

Anforderungen für das Anwendungsmanifest

Bevor Ihre App erfolgreich eine Hintergrundaufgabe registrieren kann, die außerhalb des Prozesses ausgeführt wird, muss sie im Anwendungsmanifest deklariert werden. Hintergrundaufgaben, die im selben 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 Echtzeittrigger können verwendet werden, um einfachen benutzerdefinierten Code im Hintergrund auszuführen:

Echtzeittrigger Beschreibung
Steuerkanal Hintergrundaufgaben können eine Verbindung lebendig halten und Nachrichten im Steuerkanal mithilfe des ControlChannelTrigger empfangen. Wenn Ihre App auf einen Socket lauscht, können Sie den Socketbroker anstelle des ControlChannelTrigger verwenden. Weitere Informationen zur Verwendung des Socketbrokers finden Sie unter SocketActivityTrigger. Der ControlChannelTrigger wird für Windows Phone nicht unterstützt.
Timer Hintergrundaufgaben können so häufig wie alle 15 Minuten ausgeführt werden, und sie können mithilfe des TimeTriggers zu einem bestimmten Zeitpunkt ausgeführt werden. Weitere Informationen finden Sie unter Ausführen einer Hintergrundaufgabe für einen Timer.
Pushbenachrichtigung Hintergrundaufgaben reagieren auf den PushNotificationTrigger , um unformatierte Pushbenachrichtigungen zu empfangen.

Hinweis  

Universelle Windows-Apps müssen RequestAccessAsync aufrufen, bevor Sie einen der Hintergrundtriggertypen registrieren.

Um sicherzustellen, dass Ihre universelle Windows-App nach der Veröffentlichung eines Updates weiterhin ordnungsgemäß ausgeführt wird, rufen Sie RemoveAccess auf, und rufen Sie dann RequestAccessAsync auf, wenn Die App nach der Aktualisierung gestartet wird. Weitere Informationen finden Sie in den Richtlinien für Hintergrundaufgaben.

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.

Systemereignistrigger

Die SystemTriggerType-Aufzählung stellt die folgenden Systemereignistrigger dar:

Triggername Beschreibung
UserPresent Die Hintergrundaufgabe wird ausgelöst, wenn der Benutzer anwesend wird.
UserAway Die Hintergrundaufgabe wird ausgelöst, wenn der Benutzer nicht vorhanden ist.
ControlChannelReset Die Hintergrundaufgabe wird ausgelöst, wenn ein Steuerkanal zurückgesetzt wird.
SessionConnected Die Hintergrundaufgabe wird ausgelöst, wenn die Sitzung verbunden ist.

  Das folgende Systemereignis löst ein Signal aus, wenn der Benutzer eine App auf 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.

 

Ressourceneinschränkungen für Hintergrundaufgaben

Hintergrundaufgaben sind leicht. Die Mindestausführung im Hintergrund sorgt für eine optimale Benutzererfahrung mit Vordergrund-Apps und Akkulaufzeit. Dies wird erzwungen, indem Ressourceneinschränkungen auf Hintergrundaufgaben angewendet werden.

Hintergrundaufgaben sind auf 30 Sekunden der Nutzung der Wanduhr beschränkt.

Arbeitsspeichereinschränkungen

Aufgrund der Ressourceneinschränkungen für Geräte mit geringem Arbeitsspeicher verfügen Hintergrundaufgaben möglicherweise über einen Speichergrenzwert, der die maximale Arbeitsspeichermenge bestimmt, die die Hintergrundaufgabe verwenden kann. Wenn die Hintergrundaufgabe einen Vorgang versucht, der diesen Grenzwert überschreitet, schlägt der Vorgang fehl und generiert möglicherweise eine Ausnahme außerhalb des Arbeitsspeichers, die die Aufgabe verarbeiten kann. Wenn die Aufgabe die Out-of-Memory-Ausnahme nicht behandelt, oder die Art des versuchten Vorgangs ist so, dass eine Out-of-Memory-Ausnahme nicht generiert wurde, wird die Aufgabe sofort beendet.

Sie können die MemoryManager-APIs verwenden, um die aktuelle Speicherauslastung und den Grenzwert abzufragen, um die Obergrenze (falls vorhanden) zu ermitteln und die fortlaufende Speicherauslastung Ihrer Hintergrundaufgabe zu überwachen.

Grenzwert pro Gerät für Apps mit Hintergrundaufgaben für Geräte mit geringem Arbeitsspeicher

Auf geräten mit Speichereinschränkung gibt es einen Grenzwert für die Anzahl der Apps, die auf einem Gerät installiert und Hintergrundaufgaben zu einem bestimmten Zeitpunkt verwendet werden können. Wenn diese Nummer überschritten wird, schlägt der Aufruf von RequestAccessAsync fehl, der zum Registrieren aller Hintergrundaufgaben erforderlich ist.

Stromsparmodus

Wenn Sie Ihre App nicht ausnehmen, damit sie weiterhin Hintergrundaufgaben ausführen und Pushbenachrichtigungen empfangen kann, wenn der Stromsparmodus aktiviert ist, verhindert das Feature "Stromsparmodus", wenn die App aktiviert ist, dass Hintergrundaufgaben ausgeführt werden, wenn das Gerät nicht mit externem Strom verbunden ist und der Akku unter eine angegebene Menge an Energie verbleibt. Dadurch wird nicht verhindert, dass Sie Hintergrundaufgaben registrieren.

Für Unternehmens-Apps und Apps, die nicht im Microsoft Store veröffentlicht werden, finden Sie unter "Im Hintergrund ausführen" auf unbestimmte Zeit , um zu erfahren, wie Sie eine Hintergrundaufgabe oder eine erweiterte Ausführungssitzung im Hintergrund unbegrenzt ausführen können.

Hintergrundaufgabenressource garantiert die Echtzeitkommunikation

Um zu verhindern, dass Ressourcenkontingente die Kommunikationsfunktionalität in Echtzeit beeinträchtigen, erhalten Hintergrundaufgaben, die controlChannelTrigger und PushNotificationTrigger verwenden, garantierte CPU-Ressourcenkontingente für jeden ausgeführten Vorgang. Die Ressourcenkontingente sind wie oben erwähnt und bleiben für diese Hintergrundaufgaben konstant.

Ihre App muss nichts anderes tun, um die garantierten Ressourcenkontingente für ControlChannelTrigger und PushNotificationTrigger-Hintergrundaufgaben zu erhalten. Das System behandelt diese immer als kritische Hintergrundaufgaben.

Wartungstrigger

Wartungsaufgaben werden nur ausgeführt, wenn das Gerät an den Netzstrom 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. Sie können diesen Trigger für lange ausgeführte Vorgänge wie datensynchronisierung oder Überwachung verwenden. Im Gegensatz zu Aufgaben für Systemereignisse kann eine DeviceUseTrigger-Aufgabe nur ausgelöst werden, während Ihre App im Vordergrund ausgeführt wird und keine Bedingungen dafür festgelegt werden können.

Wichtig

Der DeviceUseTrigger und DeviceServicingTrigger können nicht mit In-Process-Hintergrundaufgaben verwendet werden.

Einige wichtige Gerätevorgänge, z. B. lange ausgeführte Firmwareupdates, können nicht mit deviceUseTrigger ausgeführt werden. Solche Vorgänge können nur auf dem PC und nur von einer privilegierten App ausgeführt werden, die den DeviceServicingTrigger verwendet. Eine privilegierte App ist eine App , die der Hersteller des Geräts zum Ausführen dieser Vorgänge autorisiert hat. Gerätemetadaten werden verwendet, um anzugeben, welche App (falls vorhanden) 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 Status, Abschluss und Abbruch mithilfe von Ereignissen und lokalem Speicher an Ihre App melden. Ihre App kann auch Ausnahmen erfassen, die von einer Hintergrundaufgabe ausgelöst werden, und die Registrierung von Hintergrundaufgaben während 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 die nicht vorhandenen erneut. Heben Sie die Registrierung aller Vorgänge auf, 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 Anleitungen für Multitasking in Windows 10

Verwandte Anleitungen für Hintergrundaufgaben