Freigeben über


Eine Hintergrundaufgabe mithilfe eines Timers ausführen

Erfahren Sie, wie Sie TimeTrigger verwenden, um eine einmalige Hintergrundaufgabe zu planen oder um eine regelmäßige Hintergrundaufgabe auszuführen.

Sehen Sie sich Szenario 4 im Beispiel zur Hintergrundaktivierung an, um ein Beispiel für die Implementierung der in diesem Thema beschriebenen zeitausgelösten Hintergrundaufgabe zu sehen.

In diesem Thema wird davon ausgegangen, dass Sie über eine Hintergrundaufgabe verfügen, die regelmäßig oder zu einem bestimmten Zeitpunkt ausgeführt werden muss. Wenn Sie noch keine Hintergrundaufgabe haben, gibt es eine Beispiel-Hintergrundaufgabe bei BackgroundActivity.cs. Oder führen Sie die Schritte in Erstellen und Registrieren einer In-Process-Hintergrundaufgabe oder Erstellen und Registrieren einer Out-of-Process-Hintergrundaufgabe aus, um eine zu erstellen.

Zeitauslöser erstellen

Erstellen Sie eine neue TimeTrigger. Der zweite Parameter, OneShot, gibt an, ob die Hintergrundaufgabe nur einmal ausgeführt wird oder regelmäßig ausgeführt wird. Wenn OneShot auf "true" eingestellt ist, gibt der erste Parameter (FreshnessTime) die Anzahl der Minuten an, die gewartet werden sollen, bevor die Hintergrundaufgabe geplant wird. Wenn OneShot- auf "false" festgelegt ist, gibt FreshnessTime- die Häufigkeit an, mit der die Hintergrundaufgabe ausgeführt wird.

Der integrierte Timer für UWP-Apps (Universelle Windows-Plattform), die auf die Desktop- oder Mobilgerätefamilie abzielen, führt Hintergrundaufgaben in 15-Minuten-Intervallen aus. (Der Timer läuft in 15-Minuten-Intervallen, sodass das System nur alle 15 Minuten aufwachen muss, um die Apps zu aktivieren, die Timer-Trigger angefordert haben, was Energie spart.)

  • Wenn FreshnessTime auf 15 Minuten festgelegt ist und OneShot auf "true" gesetzt ist, wird die Aufgabe so geplant, dass sie einmal ausgeführt wird, und zwar zwischen 15 und 30 Minuten nach ihrer Registrierung. Wenn es auf 25 Minuten festgelegt ist und OneShot wahr ist, wird die Aufgabe so geplant, dass sie einmal zwischen 25 und 40 Minuten nach der Registrierung ausgeführt wird.

  • Wenn FreshnessTime auf 15 Minuten festgelegt ist und OneShot "false" ist, wird der Vorgang so geplant, dass er alle 15 Minuten läuft, beginnend 15 bis 30 Minuten nach der Registrierung. Wenn es auf n Minuten festgelegt ist und OneShot auf 'falsch' steht, wird der Vorgang alle n Minuten geplant, beginnend zwischen n und n + 15 Minuten, nachdem er registriert wurde.

Hinweis

Wenn FreshnessTime auf weniger als 15 Minuten festgelegt ist, wird beim Versuch, die Hintergrundaufgabe zu registrieren, eine Exception ausgelöst.

Dieser Trigger führt beispielsweise dazu, dass eine Hintergrundaufgabe einmal pro Stunde ausgeführt wird.

TimeTrigger hourlyTrigger = new TimeTrigger(60, false);
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

(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 UserPresent- festgelegt, sodass die Aufgabe nach dem Auslösen nur ausgeführt wird, wenn der Benutzer aktiv ist. Eine Liste mit möglichen Bedingungen finden Sie unter SystemConditionType.

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

Ausführlichere Informationen zu Bedingungen und Typen von Hintergrundtriggern finden Sie unter Unterstützung Ihrer App durch Hintergrundaufgaben.

Rufen Sie die Funktion RequestAccessAsync() auf

Rufen Sie vor der Registrierung der Hintergrundaufgabe ApplicationTrigger-RequestAccessAsync- auf, um die Ebene der Hintergrundaktivität zu bestimmen, die der Benutzer zulässt, da der Benutzer möglicherweise die Hintergrundaktivität 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
}

Hintergrundaufgabe registrieren

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.

Von Bedeutung

Legen Sie für Hintergrundaufgaben, die im selben Prozess wie Ihre App ausgeführt werden, nicht entryPointfest. Legen Sie für Hintergrundaufgaben, die in einem separaten Prozess von Ihrer App ausgeführt werden, entryPoint auf den Namespace "." und den Namen der Klasse fest, die Die Implementierung der Hintergrundaufgabe enthält.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example hourly background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example hourly background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example hourly background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);

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.

Verwalten Sie Ressourcen für Ihre Hintergrundaufgabe

Verwenden Sie BackgroundExecutionManager.RequestAccessAsync-, um festzustellen, ob der Benutzer entschieden hat, dass die Hintergrundaktivität Ihrer App eingeschränkt werden soll. Achten Sie auf den Akkuverbrauch und führen Sie Anwendungen nur im Hintergrund aus, wenn es notwendig ist, eine Aktion auszuführen, die der Benutzer wünscht. 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.

Siehe Unterstützung Ihrer App durch Hintergrundaufgaben für die Resourcenbeschränkungen, die für Hintergrundaufgaben gelten.

Bemerkungen

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 TimeTrigger- ausgeführt, wenn Sie zuerst RequestAccessAsync- aufgerufen haben.