Erstellen und Registrieren einer Hintergrundaufgabe innerhalb von Prozessen
Wichtige APIs
In diesem Thema wird gezeigt, wie Sie eine Hintergrundaufgabe erstellen und registrieren, die im gleichen Prozess wie Ihre App ausgeführt wird.
In-Process-Hintergrundaufgaben sind einfacher als Out-of-Process-Hintergrundaufgaben zu implementieren. Sie sind jedoch weniger stabil. Wenn der in einer in-Process-Hintergrundaufgabe ausgeführte Code abstürzt, wirkt sich dies auf Ihre App aus. Beachten Sie außerdem, dass DeviceUseTrigger, DeviceServicingTrigger und IoTStartupTask nicht mit dem In-Process-Modell verwendet werden können. Zudem ist das Aktivieren einer VoIP-Hintergrundaufgabe innerhalb der Anwendung nicht möglich. Diese Trigger und Aufgaben werden bei Verwendung des Out-of-Process-Hintergrundaufgabenmodells weiterhin unterstützt.
Beachten Sie, dass Hintergrundaktivitäten auch bei Ausführung innerhalb des Vordergrundprozesses der App beendet werden können, wenn Ausführungszeitlimits überschritten werden. Für bestimmte Zwecke ist die Resilienz der Trennung von Arbeiten in eine Hintergrundaufgabe, die in einem separaten Prozess ausgeführt wird, weiterhin hilfreich. Die Trennung von Hintergrundarbeiten als Aufgabe von der Vordergrundanwendung kann die beste Option für Arbeiten sein, die keine Kommunikation mit der Vordergrundanwendung erfordern.
Grundlagen
Das In-Process-Modell erweitert den Anwendungslebenszyklus um verbesserte Benachrichtigungen, wenn sich die App im Vordergrund oder im Hintergrund befindet. Zwei neue Ereignisse sind vom Anwendungsobjekt für diese Übergänge verfügbar: EnteredBackground und LeavingBackground. Diese Ereignisse passen je nach Sichtbarkeitszustand der Anwendung in den Anwendungslebenszyklus. Weitere Informationen zu diesen Ereignissen und deren Auswirkungen auf den Anwendungslebenszyklus finden Sie unter App-Lebenszyklus.
Auf oberer Ebene behandeln Sie das EnteredBackground-Ereignis zum Ausführen von Code bei der Ausführung der App im Hintergrund und das LeavingBackground-Ereignis, um zu erfahren, wann Ihre App in den Vordergrund verschoben wurde.
Registrieren des Triggers für die Hintergrundaufgabe
In-Process-Hintergrundaktivitäten werden ähnlich wie Out-of-Process-Hintergrundaktivitäten registriert. Alle Hintergrundtrigger werden mit der Registrierung mit BackgroundTaskBuilder gestartet. Der Generator vereinfacht die Registrierung einer Hintergrundaufgabe, indem alle erforderlichen Werte an einem zentralen Ort festlegt werden:
var builder = new BackgroundTaskBuilder();
builder.Name = "My Background Trigger";
builder.SetTrigger(new TimeTrigger(15, true));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();
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.
In-Process-Hintergrundaktivitäten erfolgen ohne das Festlegen von TaskEntryPoint.
Bleibt dieser Wert leer, wird der Standardeinstiegspunkt aktiviert, eine neue geschützte Methode für das Application-Objekt namens OnBackgroundActivated().
Sobald ein Trigger registriert ist, wird er basierend auf dem in der SetTrigger-Methode festgelegten Triggertyp ausgelöst. Im obigen Beispiel wird ein TimeTrigger verwendet, der 15 Minuten nach dem Registrierungszeitpunkt ausgelöst wird.
Hinzufügen einer Bedingung, die bestimmt, wann Ihre Aufgabe ausgeführt wird (optional)
Sie können eine Bedingung hinzufügen, die bestimmt, wann Ihre Aufgabe ausgeführt wird, nachdem das Auslöseereignis eintritt. Wenn Sie zum Beispiel möchten, dass die Aufgabe erst ausgeführt wird, wenn der Benutzer anwesend ist, verwenden Sie die Bedingung UserPresent. Eine Liste mit möglichen Bedingungen finden Sie in SystemConditionType.
Der folgende Beispielcode weist eine Bedingung zu, die die Anwesenheit des Benutzers voraussetzt:
builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));
Platzieren des Codes der Hintergrundaktivität in „OnBackgroundActivated()“
Platzieren Sie ihren Hintergrundaktivitätscode in OnBackgroundActivated , um auf den Hintergrundtrigger zu reagieren, wenn er ausgelöst wird. OnBackgroundActivated kann wie IBackgroundTask.Run behandelt werden. Die -Methode verfügt über einen BackgroundActivatedEventArgs-Parameter , der alles enthält, was die Run-Methode liefert. Beispiel: In App.xaml.cs:
using Windows.ApplicationModel.Background;
...
sealed partial class App : Application
{
...
protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
{
base.OnBackgroundActivated(args);
IBackgroundTaskInstance taskInstance = args.TaskInstance;
DoYourBackgroundWork(taskInstance);
}
}
Ein umfangreicheres OnBackgroundActivated-Beispiel finden Sie unter Konvertieren eines App-Diensts für die Ausführung im gleichen Prozess wie seine Host-App.
Behandeln des Status und Abschlusses von Hintergrundaufgaben
Der Aufgabenstatus und -abschluss kann genauso wie bei Multiprozess-Hintergrundaufgaben überwacht werden (siehe Überwachen von Status und Durchführung von Hintergrundaufgaben). Wahrscheinlich stellen Sie jedoch fest, dass die Überwachung mithilfe von Variablen zum Nachverfolgen von Status oder Abschluss in Ihrer App einfacher ist. Dies ist einer der Vorteile, wenn der Code der Hintergrundaktivität im selben Prozess wie Ihre App ausgeführt wird.
Behandeln des Abbruchs von Hintergrundaufgaben
In-Process-Hintergrundaufgaben werden auf die gleiche Weise abgebrochen wie Out-of-Process-Hintergrundaufgaben (siehe Behandeln einer abgebrochenen Hintergrundaufgabe). Beachten Sie, dass der BackgroundActivated-Ereignishandler vor dem Abbruch beendet werden muss, oder der gesamte Prozess wird beendet. Wenn die Vordergrund-App beim Abbrechen der Hintergrundaufgabe unerwartet geschlossen wird, überprüfen Sie, ob der Handler vor dem Abbruch beendet wurde.
Das Manifest
Im Gegensatz zu Out-of-Process-Hintergrundaufgaben müssen Sie dem Paketmanifest keine Hintergrundaufgabeninformationen hinzufügen, um In-Process-Hintergrundaufgaben auszuführen.
Zusammenfassung und nächste Schritte
Sie sollten jetzt über die Grundlagen verfügen, um eine In-Process-Hintergrundaufgabe zu schreiben.
Eine API-Referenz, konzeptionelle Richtlinien zu Hintergrundaufgaben und ausführlichere Anweisungen zum Schreiben von Apps, die Hintergrundaufgaben verwenden, finden Sie unter den folgenden verwandten Themen:
Zugehörige Themen
Ausführliche Themen mit Anweisungen zu Hintergrundaufgaben
- Konvertieren einer Out-of-Process-Hintergrundaufgabe in eine In-Process-Hintergrundaufgabe
- Erstellen und Registrieren einer Hintergrundaufgabe außerhalb von Prozessen
- Wiedergeben von Medien im Hintergrund
- Reagieren auf Systemereignisse mit Hintergrundaufgaben
- Registrieren einer Hintergrundaufgabe
- Festlegen von Bedingungen zum Ausführen einer Hintergrundaufgabe
- Verwenden eines Wartungsauslösers
- Behandeln einer abgebrochenen Hintergrundaufgabe
- Überwachen des Status und Abschlusses von Hintergrundaufgaben
- Ausführen einer Hintergrundaufgabe für einen Timer
Ratschläge zu Hintergrundaufgaben
- Richtlinien für Hintergrundaufgaben
- Debuggen einer Hintergrundaufgabe
- Auslösen von Anhalte-, Fortsetzen- und Hintergrundereignissen in UWP-Apps (beim Debuggen)
Hintergrundaufgabe – API-Referenz
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für