Freigeben über


Ausführen einer Hintergrundaufgabe für einen Timer

Erfahren Sie, wie Sie mithilfe von TimeTrigger eine einmalige Hintergrundaufgabe planen oder eine regelmäßige Hintergrundaufgabe ausführen.

Ein Beispiel für die Implementierung der in diesem Thema beschriebenen Zeitauslöser-Hintergrundaufgabe finden Sie im Beispiel "Scenario4 " im Beispiel für die Hintergrundaktivierung .

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 " aus, oder registrieren Sie eine Hintergrundaufgabe außerhalb des Prozesses, um eine Aufgabe zu erstellen.

Erstellen eines Zeitauslösers

Erstellen Sie einen neuen 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" festgelegt 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 Universelle Windows-Plattform(UWP)-Apps, die auf die Desktop- oder Mobilgerätefamilie abzielen, führt Hintergrundaufgaben in 15-Minuten-Intervallen aus. (Der Timer wird in 15-Minuten-Intervallen ausgeführt, sodass das System nur einmal alle 15 Minuten aufwachen muss, um die Apps aufzuwachen, die TimerTriggers angefordert haben- was Energie spart.)

  • Wenn FreshnessTime auf 15 Minuten festgelegt ist und OneShot "true" ist, wird die Ausführung des Vorgangs nach der Registrierung zwischen 15 und 30 Minuten geplant. Wenn sie auf 25 Minuten festgelegt ist und OneShot "true" ist, wird die Ausführung des Vorgangs nach der Registrierung zwischen 25 und 40 Minuten geplant.

  • Wenn FreshnessTime auf 15 Minuten festgelegt ist und OneShot falsch ist, wird der Vorgang alle 15 Minuten ab dem Registrierten zwischen 15 und 30 Minuten ausgeführt. Wenn der Wert auf n Minuten festgelegt ist und OneShot falsch ist, wird der Vorgang alle n Minuten zwischen n und n + 15 Minuten nach der Registrierung ausgeführt.

Hinweis

Wenn FreshnessTime auf weniger als 15 Minuten festgelegt ist, wird beim Versuch, die Hintergrundaufgabe zu registrieren, eine Ausnahme 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 der 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ü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.

Wichtig

Legen Sie für Hintergrundaufgaben, die im selben Prozess wie Ihre App ausgeführt werden, nicht fest entryPoint. Legen Sie für Hintergrundaufgaben, die in einem separaten Prozess von Ihrer App ausgeführt werden, entryPoint 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 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.

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