Freigeben über


Festlegen von Bedingungen zum Ausführen einer Hintergrundaufgabe

Wichtige APIs

Erfahren Sie, wie Bedingungen festgelegt werden, die steuern, wann die Hintergrundaufgabe ausgeführt wird.

Manchmal müssen Hintergrundaufgaben bestimmte Bedingungen erfüllen, damit die Hintergrundaufgabe erfolgreich ausgeführt werden kann. Sie können beim Registrieren der Hintergrundaufgabe eine oder mehrere der bedingungen angeben, die von SystemConditionType angegeben werden. Die Bedingung wird überprüft, nachdem der Trigger ausgelöst wurde. Die Hintergrundaufgabe wird dann in die Warteschlange eingereiht, wird aber erst ausgeführt, wenn alle erforderlichen Bedingungen erfüllt sind.

Das Platzieren von Bedingungen für Hintergrundaufgaben spart Akkulaufzeit und CPU, indem Aufgaben unnötig ausgeführt werden. Wenn Ihre Hintergrundaufgabe beispielsweise auf einem Timer ausgeführt wird und eine Internetverbindung erfordert, fügen Sie die Bedingung "InternetAvailable " dem TaskBuilder hinzu, bevor Sie die Aufgabe registrieren. Dadurch wird verhindert, dass die Aufgabe Systemressourcen und Akkulaufzeit unnötig verwendet, indem nur die Hintergrundaufgabe ausgeführt wird, wenn der Timer abgelaufen ist und das Internet verfügbar ist.

Es ist auch möglich, mehrere Bedingungen zu kombinieren, indem AddCondition mehrmals auf demselben TaskBuilder aufgerufen wird. Achten Sie darauf, keine widersprüchlichen Bedingungen wie UserPresent und UserNotPresent hinzuzufügen.

Erstellen eines SystemCondition-Objekts

In diesem Thema wird davon ausgegangen, dass Sie bereits eine Hintergrundaufgabe mit Ihrer App verknüpft haben und dass Ihre App bereits Code enthält, der ein BackgroundTaskBuilder-Objekt namens taskBuilder erstellt. Informationen finden Sie unter Erstellen und Registrieren einer In-Process-Hintergrundaufgabe oder Erstellen und Registrieren einer Hintergrundaufgabe außerhalb von Prozessen, wenn Sie zuerst eine Hintergrundaufgabe erstellen müssen.

Dieses Thema gilt für Hintergrundaufgaben, die außerhalb des Prozesses ausgeführt werden, sowie für Hintergrundaufgaben, die im selben Prozess wie die Vordergrund-App ausgeführt werden.

Erstellen Sie vor dem Hinzufügen der Bedingung ein SystemCondition-Objekt , um die Bedingung darzustellen, die für die Ausführung einer Hintergrundaufgabe wirksam sein muss. Geben Sie im Konstruktor die Bedingung an, die mit einem SystemConditionType-Enumerationswert erfüllt werden muss.

Der folgende Code erstellt ein SystemCondition -Objekt, das die InternetAvailable-Bedingung angibt:

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

Hinzufügen des SystemCondition-Objekts zu Ihrer Hintergrundaufgabe

Rufen Sie zum Hinzufügen der Bedingung die AddCondition-Methode für das BackgroundTaskBuilder-Objekt auf, und übergeben Sie sie an das SystemCondition-Objekt.

Der folgende Code verwendet taskBuilder , um die Bedingung "InternetAvailable " hinzuzufügen.

taskBuilder.AddCondition(internetCondition);
taskBuilder.AddCondition(internetCondition);
taskBuilder->AddCondition(internetCondition);

Registrieren Sie Ihre Hintergrundaufgabe

Jetzt können Sie Ihre Hintergrundaufgabe mit der Register-Methode registrieren, und die Hintergrundaufgabe wird erst gestartet, wenn die angegebene Bedingung erfüllt ist.

Der folgende Code registriert die Aufgabe und speichert das resultierende BackgroundTaskRegistration -Objekt:

BackgroundTaskRegistration task = taskBuilder.Register();
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
BackgroundTaskRegistration ^ task = taskBuilder->Register();

Hinweis

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.

Platzieren mehrerer Bedingungen für Die Hintergrundaufgabe

Um mehrere Bedingungen hinzuzufügen, führt Ihre App mehrere Aufrufe an die AddCondition-Methode aus. Diese Aufrufe müssen erfolgen, bevor die Aufgabenregistrierung wirksam wird.

Hinweis

Achten Sie darauf, einer Hintergrundaufgabe keine widersprüchlichen Bedingungen hinzuzufügen.

Der folgende Codeausschnitt zeigt mehrere Bedingungen im Kontext des Erstellens und Registrierens einer Hintergrundaufgabe.

// Set up the background task.
TimeTrigger hourlyTrigger = new TimeTrigger(60, false);

var recurringTaskBuilder = new BackgroundTaskBuilder();

recurringTaskBuilder.Name           = "Hourly background task";
recurringTaskBuilder.TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition userCondition     = new SystemCondition(SystemConditionType.UserPresent);
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.

BackgroundTaskRegistration task = recurringTaskBuilder.Register();
// Set up the background task.
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };

Windows::ApplicationModel::Background::BackgroundTaskBuilder recurringTaskBuilder;

recurringTaskBuilder.Name(L"Hourly background task");
recurringTaskBuilder.TaskEntryPoint(L"Tasks.ExampleBackgroundTaskClass");
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
Windows::ApplicationModel::Background::SystemCondition userCondition{
    Windows::ApplicationModel::Background::SystemConditionType::UserPresent };
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
// Set up the background task.
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

auto recurringTaskBuilder = ref new BackgroundTaskBuilder();

recurringTaskBuilder->Name           = "Hourly background task";
recurringTaskBuilder->TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder->SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition ^ userCondition     = ref new SystemCondition(SystemConditionType::UserPresent);
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

recurringTaskBuilder->AddCondition(userCondition);
recurringTaskBuilder->AddCondition(internetCondition);

// Done adding conditions, now register the background task.
BackgroundTaskRegistration ^ task = recurringTaskBuilder->Register();

Hinweise

Hinweis

Wählen Sie Bedingungen für Ihre Hintergrundaufgabe aus, sodass sie nur ausgeführt wird, wenn sie benötigt wird und nicht ausgeführt wird, wenn dies nicht erforderlich ist. Beschreibungen der verschiedenen Bedingungen für Hintergrundaufgaben finden Sie unter SystemConditionType.