Auslösen einer Hintergrundaufgabe in der App

Hier erfahren Sie, wie Sie ApplicationTrigger zum Aktivieren einer Hintergrundaufgabe in Ihrer App verwenden.

Ein Beispiel zum Erstellen eines Anwendungstriggers finden Sie in diesem Beispiel.

In diesem Thema wird davon ausgegangen, dass Sie über eine Hintergrundaufgabe verfügen, die Sie aus Ihrer Anwendung aktivieren möchten. Wenn Sie noch keine Hintergrundaufgabe haben, gibt es eine Beispiel-Hintergrundaufgabe bei BackgroundActivity.cs. Oder führen Sie die Schritte unter "Erstellen" aus, und registrieren Sie eine Hintergrundaufgabe außerhalb des Prozesses, um eine Aufgabe zu erstellen.

Gründe für die Verwendung eines Anwendungstriggers

Verwenden Sie einen ApplicationTrigger , um Code in einem separaten Prozess von der Vordergrund-App auszuführen. Ein ApplicationTrigger ist geeignet, wenn Ihre App über Aufgaben verfügt, die im Hintergrund ausgeführt werden müssen – auch wenn der Benutzer die Vordergrund-App schließt. Wenn die Hintergrundarbeit beim Schließen der App angehalten werden soll oder an den Zustand des Vordergrundprozesses gebunden werden soll, sollte stattdessen die erweiterte Ausführung verwendet werden.

Erstellen eines Anwendungstriggers

Erstellen Sie einen neuen ApplicationTrigger. Sie können es wie im folgenden Codeausschnitt in einem Feld speichern. Dies ist aus Gründen der Einfachheit, sodass wir später keine neue Instanz erstellen müssen, wenn wir den Trigger signalisieren möchten. Sie können jedoch jede ApplicationTrigger-Instanz verwenden, um den Trigger zu signalisieren.

// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();

(Optional) Hinzufügen einer Bedingung

Sie können eine Hintergrundaufgabenbedingung erstellen, um zu steuern, wann die Aufgabe ausgeführt wird. Eine Bedingung verhindert, dass die Hintergrundaufgabe ausgeführt wird, bis die Bedingung erfüllt ist. Weitere Informationen finden Sie unter Festlegen von Bedingungen zum Ausführen einer Hintergrundaufgabe.

In diesem Beispiel wird die Bedingung auf "InternetAvailable " festgelegt, sodass die Aufgabe nach dem Auslösen nur ausgeführt wird, wenn der Internetzugriff verfügbar ist. Eine Liste der möglichen Bedingungen finden Sie unter SystemConditionType.

SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable)

Ausführlichere Informationen zu Bedingungen und Typen von Hintergrundtriggern finden Sie unter "Unterstützen Ihrer App mit Hintergrundaufgaben".

Call RequestAccessAsync()

Rufen Sie vor der Registrierung der ApplicationTrigger-Hintergrundaufgabe RequestAccessAsync auf, um die Ebene der Hintergrundaktivität zu ermitteln, die der Benutzer zulässt, da der Benutzer möglicherweise Hintergrundaktivitäten für Ihre App deaktiviert hat. Weitere Informationen dazu, wie Benutzer die Einstellungen für Hintergrundaktivitäten steuern können, finden Sie unter "Optimieren von Hintergrundaktivitäten ".

var requestStatus = await Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
if (requestStatus != BackgroundAccessStatus.AlwaysAllowed)
{
   // Depending on the value of requestStatus, provide an appropriate response
   // such as notifying the user which functionality won't work as expected
}

Registrieren der Hintergrundaufgabe

Registrieren Sie die Hintergrundaufgabe, indem Sie die Registrierungsfunktion für Hintergrundaufgaben aufrufen. Weitere Informationen zum Registrieren von Hintergrundaufgaben und zum Anzeigen der Definition der RegisterBackgroundTask() -Methode im folgenden Beispielcode finden Sie unter Registrieren einer Hintergrundaufgabe.

Wenn Sie die Verwendung eines Anwendungstriggers in Erwägung ziehen, um die Lebensdauer des Vordergrundprozesses zu verlängern, sollten Sie stattdessen die erweiterte Ausführung verwenden. Der Anwendungstrigger wurde für die Erstellung eines separat gehosteten Prozesses entwickelt, in dem die Arbeit ausgeführt werden kann. Der folgende Codeausschnitt registriert einen Out-of-Process-Hintergrundtrigger.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example application trigger";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example application trigger";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);

Parameter für die Registrierung von Hintergrundaufgaben werden zum Zeitpunkt der Registrierung überprüft. Wenn einer der Registrierungsparameter ungültig ist, wird ein Fehler zurückgegeben. Stellen Sie sicher, dass Ihre App Szenarien, in denen die Registrierung von Hintergrundaufgaben fehlschlägt, ordnungsgemäß behandelt. Wenn ihre App stattdessen von einem gültigen Registrierungsobjekt abhängt, nachdem Sie versucht haben, eine Aufgabe zu registrieren, kann es abstürzen.

Auslösen der Hintergrundaufgabe

Bevor Sie die Hintergrundaufgabe auslösen, verwenden Sie "BackgroundTaskRegistration ", um zu überprüfen, ob die Hintergrundaufgabe registriert ist. Ein guter Zeitpunkt, um zu überprüfen, ob alle Hintergrundaufgaben während des App-Starts registriert sind.

Auslösen der Hintergrundaufgabe durch Aufrufen von ApplicationTrigger.RequestAsync. Jede ApplicationTrigger-Instanz führt dies aus.

Beachten Sie, dass ApplicationTrigger.RequestAsync nicht von der Hintergrundaufgabe selbst aufgerufen werden kann, oder wenn sich die App im Zustand "Hintergrundausführung" befindet (weitere Informationen zu Anwendungszuständen finden Sie im App-Lebenszyklus ). Sie kann DisabledByPolicy zurückgeben, wenn der Benutzer Energie- oder Datenschutzrichtlinien festgelegt hat, die verhindern, dass die App Hintergrundaktivitäten ausführt. Außerdem kann jeweils nur ein AppTrigger ausgeführt werden. Wenn Sie versuchen, einen AppTrigger auszuführen, während bereits ein anderer ausgeführt wird, gibt die Funktion "CurrentlyRunning" zurück.

var result = await _AppTrigger.RequestAsync();

Verwalten von Ressourcen für Ihre Hintergrundaufgabe

Verwenden Sie BackgroundExecutionManager.RequestAccessAsync , um festzustellen, ob der Benutzer entschieden hat, dass die Hintergrundaktivität Ihrer App eingeschränkt sein soll. Achten Sie auf die Akkunutzung, und führen Sie sie nur im Hintergrund aus, wenn eine aktion ausgeführt werden muss, die der Benutzer möchte. Weitere Informationen dazu, wie Benutzer die Einstellungen für Hintergrundaktivitäten steuern können, finden Sie unter "Optimieren von Hintergrundaktivitäten ".

  • Speicher: Die Optimierung des Speichers und der Energienutzung Ihrer App ist entscheidend, um sicherzustellen, dass das Betriebssystem die Ausführung ihrer Hintergrundaufgabe ermöglicht. Verwenden Sie die Speicherverwaltungs-APIs , um zu sehen, wie viel Arbeitsspeicher Ihre Hintergrundaufgabe verwendet. Je mehr Arbeitsspeicher ihre Hintergrundaufgabe verwendet, desto schwieriger ist es für das Betriebssystem, die Ausführung beizubehalten, wenn sich eine andere App im Vordergrund befindet. Der Benutzer hat letztendlich die Kontrolle über alle Hintergrundaktivitäten, die Ihre App ausführen kann, und hat die Sichtbarkeit der Auswirkungen, die Ihre App auf die Akkunutzung hat.
  • CPU-Zeit: Hintergrundaufgaben sind auf die Nutzungszeit der Wanduhr begrenzt, die sie basierend auf dem Triggertyp erhalten. Hintergrundaufgaben, die vom Anwendungstrigger ausgelöst werden, sind auf etwa 10 Minuten begrenzt.

Informationen zu den Ressourceneinschränkungen, die auf Hintergrundaufgaben angewendet werden, finden Sie unter "Unterstützen Ihrer App mit Hintergrundaufgaben ".

Hinweise

Ab Windows 10 ist es nicht mehr erforderlich, dass der Benutzer Ihre App zum Sperrbildschirm hinzusetzt, um Hintergrundaufgaben zu nutzen.

Eine Hintergrundaufgabe wird nur mit einem ApplicationTrigger ausgeführt, wenn Sie zuerst RequestAccessAsync aufgerufen haben.