Zugreifen auf Sensoren und Geräte von einer Hintergrundaufgabe aus

Mit DeviceUseTrigger kann Ihre universelle Windows-App im Hintergrund auf Sensoren und Peripheriegeräte zugreifen. Dies ist selbst dann möglich, wenn die Vordergrund-App angehalten wird. Je nachdem, wo Ihre App ausgeführt wird, kann sie eine Hintergrundaufgabe zum Synchronisieren von Daten mit Geräten oder zum Überwachen von Sensoren verwenden. Zur Verbesserung der Akkulaufzeit und Sicherstellung der Zustimmung durch den Benutzer unterliegt die Nutzung von DeviceUseTrigger den Richtlinien, die in diesem Thema beschrieben werden.

Erstellen Sie zum Zugreifen auf Sensoren oder Peripheriegeräte im Hintergrund eine Hintergrundaufgabe, für die DeviceUseTrigger verwendet wird. Ein Beispiel für die Vorgehensweise auf einem PC finden Sie unter Beispiel für ein benutzerdefiniertes USB-Gerät. Ein Beispiel für ein Smartphone finden Sie unter Beispiel für Hintergrundsensoren.

Wichtig

DeviceUseTrigger kann nicht für In-Process-Hintergrundaufgaben verwendet werden. Die Informationen in diesem Thema gelten nur für Out-of-Process-Hintergrundaufgaben.

Hintergrundaufgabe für Geräte – Übersicht

Wenn Ihre App für den Benutzer nicht mehr sichtbar ist, wird die App von Windows angehalten oder beendet, um Arbeitsspeicher und CPU-Ressourcen freizugeben. Dies ermöglicht anderen Apps die Ausführung im Vordergrund und reduziert den Stromverbrauch. In diesem Fall wären alle laufenden Datenereignisse ohne die Hilfe einer Hintergrundaufgabe verloren. Windows stellt den Trigger für die Hintergrundaufgabe bereit: DeviceUseTrigger. Damit kann Ihre App lange Synchronisierungs- und Überwachungsvorgänge auf Geräten und Sensoren auch dann sicher im Hintergrund ausführen, wenn Ihre App angehalten wurde. Weitere Informationen zum App-Lebenszyklus finden Sie unter Starten, Fortsetzen und Hintergrundaufgaben. Weitere Informationen zu Hintergrundaufgaben finden Sie unter Unterstützen von Apps durch Hintergrundaufgaben.

Hinweis In einer universellen Windows-App erfordert die Synchronisierung eines Geräts im Hintergrund, dass Ihr Benutzer die Hintergrundsynchronisierung durch Ihre App genehmigt hat. Das Gerät muss – mit E/A-Aktivierung – auch mit dem PC verbunden oder gekoppelt sein und kann maximal zehn Minuten lang Aktivitäten im Hintergrund ausführen. Weitere Details zur Richtlinienerzwingung sind weiter unten in diesem Thema beschrieben.

Einschränkung: Kritische Gerätevorgänge

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.

In einer DeviceUseTrigger-Hintergrundaufgabe unterstützte Protokolle/APIs

Hintergrundaufgaben mit DeviceUseTrigger ermöglichen Ihrer App die Kommunikation über viele Protokolle/APIs. Die meisten davon werden von den vom System ausgelösten Hintergrundaufgaben nicht unterstützt. Folgende Protokolle werden von einer universellen Windows-App unterstützt.

Protocol DeviceUseTrigger in einer universellen Windows-App
USB Dieses Protokoll wird unterstützt.
HID Dieses Protokoll wird unterstützt.
Bluetooth RFCOMM Dieses Protokoll wird unterstützt.
Bluetooth GATT Dieses Protokoll wird unterstützt.
MTP Dieses Protokoll wird unterstützt.
Netzwerk (drahtgebunden) Dieses Protokoll wird unterstützt.
Netzwerk (WLAN) Dieses Protokoll wird unterstützt.
IDeviceIOControl DeviceServicingTrigger unterstützt IDeviceIOControl.
Sensor-API deviceservicingtrigger unterstützt universelle Sensor-APIs (beschränkt auf Sensoren in der universellen Gerätefamilie)

Registrieren von Hintergrundaufgaben im App-Paketmanifest

Ihre App führt Synchronisierungs- und Aktualisierungsvorgänge in Code durch, der als Teil einer Hintergrundaufgabe ausgeführt wird. Dieser Code ist in eine Windows-Runtime-Klasse eingebettet, mit der IBackgroundTask implementiert wird (oder auf einer dedizierten JavaScript-Seite für JavaScript-Apps). Zum Verwenden einer DeviceUseTrigger-Hintergrundaufgabe muss Ihre App diese in der App-Manifestdatei einer Vordergrund-App deklarieren, wie dies auch für vom System ausgelöste Hintergrundaufgaben erfolgt.

In diesem Beispiel für eine App-Paketmanifestdatei ist DeviceLibrary.SyncContent der Einstiegspunkt für eine Hintergrundaufgabe, die DeviceUseTrigger verwendet.

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" />
    </BackgroundTasks>
  </Extension>
</Extensions>

Einführung in die Verwendung von DeviceUseTrigger

Führen Sie diese grundlegenden Schritte aus, um DeviceUseTrigger zu verwenden. Weitere Informationen zu Hintergrundaufgaben finden Sie unter Unterstützen Ihrer App mit Hintergrundaufgaben.

  1. Ihre App registriert die Hintergrundaufgabe im App-Manifest und bettet den Code für die Hintergrundaufgabe in einer Windows-Runtime-Klasse ein, die IBackgroundTask implementiert, oder in eine dedizierte JavaScript-Seite für JavaScript-Apps.
  2. Beim Starten erstellt und konfiguriert Ihre App ein Triggerobjekt vom Typ DeviceUseTrigger und speichert die Triggerinstanz für die künftige Verwendung.
  3. Die App prüft, ob die Hintergrundaufgabe bereits registriert wurde. Wenn nicht, führt sie dafür die Registrierung für den Trigger durch. Beachten Sie, dass es für die App nicht zulässig ist, Bedingungen für die Aufgabe festzulegen, die diesem Trigger zugeordnet ist.
  4. Wenn Ihre App die Hintergrundaufgabe auslösen muss, muss sie zuerst RequestAccessAsync aufrufen, um zu prüfen, ob die App eine Hintergrundaufgabe anfordern kann.
  5. Wenn die App die Hintergrundaufgabe anfordern kann, ruft sie die RequestAsync-Aktivierungsmethode für das Triggerobjekt des Geräts auf.
  6. Ihre Hintergrundaufgabe wird nicht wie andere Hintergrundaufgaben gedrosselt (es gilt kein CPU-Zeitkontingent), sondern wird mit reduzierter Priorität ausgeführt, um die Reaktionsfähigkeit von Vordergrund-Apps aufrechtzuerhalten.
  7. Windows überprüft dann anhand des Triggertyps, ob die erforderlichen Richtlinien erfüllt sind, einschließlich der Anforderung einer Zustimmung des Benutzers für den Vorgang, bevor die Hintergrundaufgabe gestartet wird.
  8. Windows überwacht die Systembedingungen und die Aufgabenlaufzeit und bricht die Aufgabe ggf. ab, falls die erforderlichen Bedingungen nicht mehr erfüllt sind.
  9. Wenn die Hintergrundaufgabe den aktuellen Status oder den Abschluss des Vorgangs meldet, empfängt die App diese Ereignisse über die Status- und Abschlussereignisse der registrierten Aufgabe.

Wichtig Berücksichtigen Sie bei der Verwendung von DeviceUseTrigger die folgenden wichtigen Punkte:

  • Die Möglichkeit zur programmgesteuerten Auslösung von Hintergrundaufgaben mithilfe von DeviceUseTrigger wurde erstmals in Windows 8.1 und Windows Phone 8.1 eingeführt.

  • Bestimmte Richtlinien werden von Windows erzwungen, um sicherzustellen, dass die Zustimmung des Benutzers vorliegt, wenn Peripheriegeräte auf dem PC aktualisiert werden.

  • Weitere Richtlinien werden erzwungen, um für Benutzer die Akkulaufzeit zu verlängern, wenn Peripheriegeräte synchronisiert und aktualisiert werden.

  • Hintergrundaufgaben, für die DeviceUseTrigger verwendet wird, können von Windows ggf. abgebrochen werden, wenn bestimmte Richtlinienanforderungen nicht mehr erfüllt sind, einschließlich einer Maximaldauer für die Hintergrundzeit (Gesamtbetrachtungszeit). Es ist wichtig, diese Richtlinienanforderungen zu berücksichtigen, wenn Sie diese Hintergrundaufgaben zum Interagieren mit Ihrem Peripheriegerät verwenden.

Tipp Laden Sie ein Beispiel herunter, um zu sehen, wie diese Hintergrundaufgaben funktionieren. Ein Beispiel für die Vorgehensweise auf einem PC finden Sie unter Beispiel für ein benutzerdefiniertes USB-Gerät. Ein Beispiel für ein Smartphone finden Sie unter Beispiel für Hintergrundsensoren.  

Einschränkungen in Bezug auf die Häufigkeit und den Vordergrund

Es besteht keine Einschränkung hinsichtlich der Häufigkeit, mit der Ihre App Vorgänge initiieren kann, aber sie kann nur jeweils einen Hintergrundaufgabenvorgang mit DeviceUseTrigger ausführen (dies wirkt sich nicht auf andere Arten von Hintergrundaufgaben aus) und eine Hintergrundaufgabe nur initiieren, während sich Ihre App im Vordergrund befindet. Wenn sich Ihre App nicht im Vordergrund befindet, kann sie eine Hintergrundaufgabe nicht mit DeviceUseTrigger initiieren. Ihre App kann keine zweite DeviceUseTrigger-Hintergrundaufgabe initiieren, bevor die erste Hintergrundaufgabe abgeschlossen wurde.

Geräteeinschränkungen

Jede App ist zwar auf die Registrierung und Ausführung von nur einer DeviceUseTrigger-Hintergrundaufgabe beschränkt, aber das Gerät (auf dem Ihre App ausgeführt wird) kann mehreren Apps das Registrieren und Ausführen von DeviceUseTrigger-Hintergrundaufgaben erlauben. Je nach Gerät kann ggf. eine Obergrenze für die Gesamtzahl an DeviceUseTrigger-Hintergrundaufgaben aller Apps gelten. Dies verringert den Stromverbrauch auf Geräten, auf denen die Ressourcen knapp sind. Weitere Informationen hierzu finden Sie in der folgenden Tabelle.

Über eine einzelne DeviceUseTrigger-Hintergrundaufgabe kann Ihre App auf eine unbegrenzte Zahl von Peripheriegeräten oder Sensoren zugreifen, die nur von den unterstützten APIs und Protokollen beschränkt wird, die in der obigen Tabelle aufgeführt sind.

Richtlinien für Hintergrundaufgaben

Windows erzwingt Richtlinien, wenn von Ihrer App eine DeviceUseTrigger-Hintergrundaufgabe verwendet wird. Wenn diese Richtlinien nicht erfüllt sind, wird die Hintergrundaufgabe ggf. abgebrochen. Es ist wichtig, diese Richtlinienanforderungen zu berücksichtigen, wenn Sie diese Art von Hintergrundaufgaben zum Interagieren mit Geräten oder Sensoren verwenden.

Richtlinien für die Aufgabeninitiierung

In dieser Tabelle ist aufgeführt, welche Richtlinien für die Aufgabeninitiierung für universelle Windows-Apps gelten.

Policy DeviceUseTrigger in einer universellen Windows-App
Ihre App befindet sich beim Auslösen der Hintergrundaufgabe im Vordergrund. Richtlinie gilt
Das Gerät ist an das System angeschlossen (bzw. befindet sich bei einem Drahtlosgerät in Reichweite). Richtlinie gilt
Die App kann mithilfe der unterstützten Geräteperipherie-APIs (Windows-Runtime-APIs für USB, HID, Bluetooth, Sensoren usw.) auf das Gerät zugreifen. Falls Ihre App nicht auf das Gerät oder den Sensor zugreifen kann, wird der Zugriff auf die Hintergrundaufgabe verweigert. Richtlinie gilt
Der von der App bereitgestellte Einstiegspunkt für die Hintergrundaufgabe wird im App-Paketmanifest registriert. Richtlinie gilt
Es wird nur eine DeviceUseTrigger-Hintergrundaufgabe pro App ausgeführt. Richtlinie gilt
Die maximale Anzahl von DeviceUseTrigger-Hintergrundaufgaben wurde auf dem Gerät (auf dem die App ausgeführt wird) noch nicht erreicht. Desktopgerätefamilie: Eine unbegrenzte Anzahl von Aufgaben kann registriert und parallel ausgeführt werden. Familie mobiler Geräte: 1 Aufgabe auf einem 512-MB-Gerät; Andernfalls können zwei Tasks registriert und parallel ausgeführt werden.
Maximale Anzahl von Peripheriegeräten oder Sensoren, auf die Ihre App über eine einzelne DeviceUseTrigger-Hintergrundaufgabe zugreifen kann, wenn sie die unterstützten APIs/Protokolle verwendet. unbegrenzt
Die Hintergrundaufgabe verbraucht pro Minute 400 ms an CPU-Zeit (bei einer CPU mit 1 GHz), wenn der Bildschirm gesperrt ist. Bei nicht gesperrtem Bildschirm wird diese Zeit innerhalb von 5 Minuten verbraucht. Wenn diese Richtlinie nicht erfüllt wird, kann dies zum Abbruch der Aufgabe führen. Richtlinie gilt

Richtlinienprüfung zur Laufzeit

Windows erzwingt die folgenden Richtlinienanforderungen zur Laufzeit, während Ihre Aufgabe im Hintergrund ausgeführt wird. Wenn eine der Laufzeitanforderungen nicht mehr erfüllt (true) ist, bricht Windows die Hintergrundaufgabe für das Gerät ab.

In dieser Tabelle ist aufgeführt, welche Laufzeitrichtlinien für universelle Windows-Apps gelten.

Richtlinienprüfung DeviceUseTrigger in einer universellen Windows-App
Das Gerät ist an das System angeschlossen (bzw. befindet sich bei einem Drahtlosgerät in Reichweite). Richtlinienprüfung gilt
Aufgabe führt regelmäßig E/A-Vorgänge für das Gerät durch (1 E/A alle 5 Sekunden). Richtlinienprüfung gilt
Die App hat die Aufgabe nicht abgebrochen. Richtlinienprüfung gilt
Gesamtbetrachtungszeit-Limit – Gesamtzeit, die die Aufgabe der App im Hintergrund ausgeführt werden kann. Desktopgerätefamilie: 10 Minuten. Familie mobiler Geräte: Keine Zeitliche Begrenzung. Um Ressourcen zu schonen, können maximal eine oder zwei Aufgaben gleichzeitig ausgeführt werden.
Die App wurde nicht beendet. Richtlinienprüfung gilt

Bewährte Methoden

Unten sind bewährte Methoden für Apps angegeben, von denen die DeviceUseTrigger-Hintergrundaufgaben verwendet werden.

Programmieren einer Hintergrundaufgabe

Mit dem Verwenden der DeviceUseTrigger-Hintergrundaufgabe über Ihre App wird sichergestellt, dass alle von der Vordergrund-App gestarteten Synchronisierungs- oder Überwachungsvorgänge im Hintergrund weiterhin ausgeführt werden, wenn Benutzer Apps wechseln und Ihre Vordergrund-App von Windows angehalten wird. Wir empfehlen Ihnen, dieses allgemeine Modell zum Registrieren, Auslösen und Aufheben der Registrierung von Hintergrundaufgaben zu verwenden:

  1. Rufen Sie RequestAccessAsync auf, um zu überprüfen, ob die App eine Hintergrundaufgabe anfordern kann. Dies muss erfolgen, bevor eine Hintergrundaufgabe registriert wird.

  2. Registrieren Sie die Hintergrundaufgabe, bevor Sie den Trigger anfordern.

  3. Verbinden Sie Ereignishandler für den aktuellen Status und den Abschluss mit dem Trigger. Wenn Ihre App aus dem angehaltenen Zustand zurückkehrt, stellt Windows für die App alle in die Warteschlange eingereihten Ereignisse zum Status und Abschluss bereit, mit denen der Status der Hintergrundaufgaben ermittelt werden kann.

  4. Schließen Sie alle geöffneten Geräte- oder Sensorobjekte, wenn Sie Ihre DeviceUseTrigger-Hintergrundaufgabe auslösen, damit diese Geräte bzw. Sensoren geöffnet und von der Hintergrundaufgabe verwendet werden können.

  5. Registrieren Sie den Trigger.

  6. Berücksichtigen Sie die Auswirkung auf den Stromverbrauch, die mit dem Zugreifen auf ein Gerät oder einen Sensor über eine Hintergrundaufgabe verbunden ist. Wenn Sie das Berichtsintervall eines Sensors zu häufig ausführen, wird die Aufgabe unter Umständen so oft ausgeführt, dass der Akku eines Smartphones schnell leer ist.

  7. Heben Sie die Registrierung der Hintergrundaufgabe auf, wenn die Hintergrundaufgabe abgeschlossen ist.

  8. Führen Sie die Registrierung für Abbruchereignisse über die Klasse der Hintergrundaufgabe durch. Die Registrierung für Abbruchereignisse ermöglicht dem Code der Hintergrundaufgabe das saubere Beenden der ausgeführten Hintergrundaufgabe, wenn sie von Windows oder Ihrer Vordergrund-App abgebrochen wird.

  9. Heben Sie die Registrierung beim Beenden der App auf (nicht beim Anhalten), und brechen Sie alle laufenden Aufgaben ab, wenn diese für die App nicht mehr benötigt werden. Auf Systemen mit knappen Ressourcen, z. B. Smartphones mit wenig Arbeitsspeicher, ermöglicht diese Maßnahme anderen Apps die Verwendung einer DeviceUseTrigger-Hintergrundaufgabe.

    • Heben Sie die Registrierung auf, und brechen Sie alle laufenden Aufgaben ab, wenn Ihre App beendet wird.

    • Beim Beenden der App werden die Hintergrundaufgaben abgebrochen, und alle vorhandenen Ereignishandler werden von den vorhandenen Hintergrundaufgaben getrennt. Sie können den Zustand Ihrer Hintergrundaufgaben dann nicht mehr ermitteln. Wenn Sie die Registrierung der Hintergrundaufgabe aufheben und sie abbrechen, können die Hintergrundaufgaben mit Ihrem Abbruchcode sauber beendet werden.

Abbrechen einer Hintergrundaufgabe

Zum Abbrechen einer Aufgabe, die im Hintergrund Ihrer Vordergrund-App ausgeführt wird, verwenden Sie die Unregister-Methode des BackgroundTaskRegistration-Objekts, das Sie in der App zum Registrieren der DeviceUseTrigger-Hintergrundaufgabe verwenden. Wenn Sie die Registrierung der Hintergrundaufgabe mithilfe der Unregister-Methode unter BackgroundTaskRegistration aufheben, bricht die Infrastruktur der Hintergrundaufgaben Ihre Hintergrundaufgabe ab.

Für die Unregister-Methode wird zusätzlich der boolesche Wert "true" oder „false“ verwendet, um anzugeben, ob derzeit ausgeführte Instanzen der Hintergrundaufgabe abgebrochen werden sollen, ohne deren Beendigung abzuwarten. Weitere Informationen finden Sie im API-Referenzthema für Unregister.

Zusätzlich zu Unregister muss Ihre App auch BackgroundTaskDeferral.Complete aufrufen. So wird dem System mitgeteilt, dass der asynchrone Vorgang, der einer Hintergrundaufgabe zugeordnet ist, abgeschlossen ist.