Erstellen und Registrieren einer Hintergrundaufgabe innerhalb von Prozessen

Wichtige APIs

In diesem Thema wird veranschaulicht, wie Sie eine Hintergrundaufgabe erstellen und registrieren, die im gleichen Prozess wie Ihre App ausgeführt wird.

Hintergrundaufgaben in Prozessen sind einfacher zu implementieren als Hintergrundaufgaben außerhalb von Prozessen. Sie sind jedoch weniger robust. Wenn der in einer prozessinternen Hintergrundaufgabe ausgeführte Code abstürzt, nimmt er Ihre App herunter. Beachten Sie außerdem, dass DeviceUseTrigger, DeviceServicingTrigger und IoTStartupTask nicht mit dem In-Process-Modell verwendet werden können. Die Aktivierung einer VoIP-Hintergrundaufgabe in Ihrer Anwendung ist ebenfalls nicht möglich. Diese Trigger und Aufgaben werden weiterhin mithilfe des Out-of-Process-Hintergrundaufgabenmodells unterstützt.

Beachten Sie, dass Hintergrundaktivitäten auch dann beendet werden können, wenn sie innerhalb des Vordergrundprozesses der App ausgeführt werden, wenn sie über Die Ausführungszeitlimits verfügt. Für einige Zwecke ist die Resilienz der Trennung von Arbeit in eine Hintergrundaufgabe, die in einem separaten Prozess ausgeführt wird, weiterhin nützlich. Das Trennen der Hintergrundarbeit als Aufgabe von der Vordergrundanwendung ist möglicherweise die beste Option für Arbeit, die keine Kommunikation mit der Vordergrundanwendung erfordert.

Grundlagen

Das In-Process-Modell verbessert den Anwendungslebenszyklus mit verbesserten Benachrichtigungen, wenn sich Ihre App im Vordergrund oder im Hintergrund befindet. Zwei neue Ereignisse sind über das Application-Objekt für diese Übergänge verfügbar: EnteredBackground und LeavingBackground. Diese Ereignisse passen basierend auf dem Sichtbarkeitsstatus Ihrer Anwendung in den Anwendungslebenszyklus. Weitere Informationen zu diesen Ereignissen und deren Auswirkungen auf den Anwendungslebenszyklus im App-Lebenszyklus.

Auf hoher Ebene behandeln Sie das EnteredBackground-Ereignis, um Den Code auszuführen, der ausgeführt wird, während die App im Hintergrund ausgeführt wird, und behandeln LeavingBackground, um zu wissen, wann Ihre App in den Vordergrund verschoben wurde.

Registrieren des Triggers für Hintergrundaufgaben

In-Process-Hintergrundaktivitäten werden ähnlich wie Hintergrundaktivitäten außerhalb von Prozessen registriert. Alle Hintergrundtrigger beginnen mit der Registrierung mit dem BackgroundTaskBuilder. Der Generator erleichtert die Registrierung einer Hintergrundaufgabe, indem alle erforderlichen Werte an einer zentralen Stelle festgelegt 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 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, müssen Sie RemoveAccess aufrufen und dann RequestAccessAsync aufrufen, wenn die App nach der Aktualisierung gestartet wird. Weitere Informationen finden Sie in den Richtlinien für Hintergrundaufgaben.

Bei In-Process-Hintergrundaktivitäten können Sie den Standardeinstiegspunkt nicht leer lassen TaskEntryPoint. , eine neue geschützte Methode für das Application-Objekt namens "OnBackgroundActivated()".

Sobald ein Trigger registriert ist, wird er basierend auf dem Typ des Triggers ausgelöst, der in der SetTrigger-Methode festgelegt ist. Im obigen Beispiel wird ein TimeTrigger verwendet, der fünfzehn Minuten nach der Registrierung ausgelöst wird.

Hinzufügen einer Bedingung zum Steuern, wann ihre Aufgabe ausgeführt wird (optional)

Sie können eine Bedingung hinzufügen, um zu steuern, wann die Aufgabe nach dem Auslösenereignis ausgeführt wird. Wenn die Aufgabe beispielsweise erst ausgeführt werden soll, wenn der Benutzer vorhanden ist, verwenden Sie die Bedingung UserPresent. Eine Liste der möglichen Bedingungen finden Sie unter SystemConditionType.

Der folgende Beispielcode weist eine Bedingung zu, für die der Benutzer vorhanden sein muss:

builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));

Platzieren Des Hintergrundaktivitätscodes 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 bereitstellt. 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, der im gleichen Prozess wie die Host-App ausgeführt wird.

Behandeln des Status und Abschluss von Hintergrundaufgaben

Der Vorgangsfortschritt und der Abschluss können genauso überwacht werden wie für Mehrprozess-Hintergrundaufgaben (siehe Überwachen des Status und Abschluss von Hintergrundaufgaben), aber Sie werden wahrscheinlich feststellen, dass Sie sie einfacher nachverfolgen können, indem Sie Variablen verwenden, um den Status oder den Abschlussstatus in Ihrer App nachzuverfolgen. Dies ist einer der Vorteile, wenn Ihr Hintergrundaktivitätscode im gleichen Prozess wie Ihre App ausgeführt wird.

Behandeln des Abbruchs von Hintergrundaufgaben

In-Process-Hintergrundaufgaben werden auf die gleiche Weise abgebrochen wie Hintergrundaufgaben außerhalb von Prozessen (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 unerwartet geschlossen wird, wenn Sie die Hintergrundaufgabe abbrechen, überprüfen Sie, ob der Handler vor dem Abbruch beendet wurde.

Das Manifest

Im Gegensatz zu Hintergrundaufgaben außerhalb von Prozessen müssen Sie dem Paketmanifest keine Hintergrundaufgabeninformationen hinzufügen, um In-Process-Hintergrundaufgaben auszuführen.

Zusammenfassung und nächste Schritte

Sie sollten nun die Grundlagen zum Schreiben einer In-Process-Hintergrundaufgabe verstehen.

In den folgenden verwandten Themen finden Sie API-Referenz, konzeptionelle Anleitungen für Hintergrundaufgaben und ausführlichere Anweisungen zum Schreiben von Apps, die Hintergrundaufgaben verwenden.

Ausführliche Themen zu Anleitungen zu Hintergrundaufgaben

Leitfaden für Hintergrundaufgaben

Hintergrundaufgaben-API-Referenz