Auslösen einer Hintergrundaufgabe in der AppTrigger a background task from within your app

Hier erfahren Sie, wie Sie ApplicationTrigger zum Aktivieren einer Hintergrundaufgabe in Ihrer App verwenden.Learn how to use the ApplicationTrigger to activate a background task from within your app.

Ein Beispiel zum Erstellen eines Anwendungs Auslösers finden Sie in diesem Beispiel.For an example of how to create an Application trigger, see this example.

In diesem Thema wird davon ausgegangen, dass Sie über eine Hintergrundaufgabe verfügen, die Sie in Ihrer Anwendung aktivieren möchten.This topic assumes that you have a background task that you want to activate from your application. Wenn Sie noch nicht über eine Hintergrundaufgabe verfügen, finden Sie eine Beispiel-Hintergrundaufgabe unter BackgroundActivity.cs.If you don't already have a background task, there is a sample background task at BackgroundActivity.cs. Oder führen Sie die Schritte unter Erstellen und Registrieren eines Out-of-Process-Hintergrund Tasks aus , um einen zu erstellen.Or, follow the steps in Create and register an out-of-process background task to create one.

Verwendung eines Anwendungs AuslösersWhy use an application trigger

Verwenden Sie einen Application-Auslösers , um Code in einem separaten Prozess von der Vordergrund-App auszuführen.Use an ApplicationTrigger to run code in a separate process from the foreground app. Ein Application-Auslösers ist geeignet, wenn Ihre APP überarbeiten verfügt, die im Hintergrund ausgeführt werden müssen, auch wenn der Benutzer die Vordergrund-APP schließt.An ApplicationTrigger is appropriate if your app has work that needs to be done in the background--even if the user closes the foreground app. Wenn Hintergrundarbeit angehalten werden soll, wenn die app geschlossen wird, oder wenn Sie an den Zustand des Vordergrund Prozesses gebunden werden soll, sollte stattdessen die Erweiterte Ausführung verwendet werden.If background work should halt when the app is closed, or should be tied to the state of the foreground process, then Extended Execution should be used, instead.

Erstellen eines Anwendungs AuslösersCreate an application trigger

Erstellen Sie einen neuen Application-Auslösers.Create a new ApplicationTrigger. Sie können Sie in einem Feld speichern, wie im folgenden Code Ausschnitt zu sehen.You could store it in a field as is done in the snippet below. Dies ist der Zweck der einfacheren Verwendung, damit wir später keine neue Instanz erstellen müssen, wenn wir den-Wert signalisieren möchten.This is for convenience so that we don't have to create a new instance later when we want to signal the trigger. Sie können jedoch eine beliebige applicationauslöst -Instanz verwenden, um den-Aufruf zu signalisieren.But you can use any ApplicationTrigger instance to signal the trigger.

// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();

(Optional) Hinzufügen einer Bedingung(Optional) Add a condition

Sie können eine Hintergrundaufgaben Bedingung erstellen, um zu steuern, wann die Aufgabe ausgeführt wird.You can create a background task condition to control when the task runs. Eine Bedingung verhindert, dass die Hintergrundaufgabe ausgeführt wird, bis die Bedingung erfüllt ist.A condition prevents the background task from running until the condition is met. Weitere Informationen finden Sie unter Festlegen von Bedingungen für das Ausführen eines HintergrundTasks.For more information, see Set conditions for running a background task.

In diesem Beispiel wird die Bedingung auf internettavailable festgelegt, sodass die Aufgabe nach dem auslösen nur dann ausgeführt wird, wenn der Internet Zugriff verfügbar ist.In this example the condition is set to InternetAvailable so that, once triggered, the task only runs once internet access is available. Eine Liste mit möglichen Bedingungen finden Sie in SystemConditionType.For a list of possible conditions, see SystemConditionType.

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

Ausführlichere Informationen zu Bedingungen und Typen von Hintergrund Triggern finden Sie unter unterstützen der APP mit Hintergrundaufgaben.For more in-depth information on conditions and types of background triggers, see Support your app with background tasks.

Aufrufen von RequestAccessAsync()Call RequestAccessAsync()

Bevor Sie den applicationlöst -Hintergrund Task registrieren, müssen Sie requestaccessasync aufrufen, um die Ebene der Hintergrund Aktivität zu ermitteln, die der Benutzer zulässt, da der Benutzer möglicherweise Hintergrund Aktivitäten für Ihre APP deaktiviert hat.Before registering the ApplicationTrigger background task, call RequestAccessAsync to determine the level of background activity the user allows because the user may have disabled background activity for your app. Weitere Informationen zu den Möglichkeiten, mit denen Benutzer die Einstellungen für Hintergrund Aktivitäten steuern können, finden Sie unter Optimieren der Hintergrund Aktivität .See Optimize background activity for more information about the ways users can control the settings for background activity.

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 HintergrundaufgabeRegister the background task

Registrieren Sie die Hintergrundaufgabe, indem Sie die Funktion zum Registrieren der Hintergrundaufgabe aufrufen.Register the background task by calling your background task registration function. Weitere Informationen zum Registrieren von Hintergrundaufgaben und zum Anzeigen der Definition der registerbackgroundtask () -Methode im folgenden Beispielcode finden Sie unter Registrieren eines HintergrundTasks.For more information on registering background tasks, and to see the definition of the RegisterBackgroundTask() method in the sample code below, see Register a background task.

Wenn Sie die Lebensdauer Ihres Vordergrund Prozesses mithilfe eines Anwendungs Auslösers verlängern, erwägen Sie stattdessen die Verwendung der erweiterten Ausführung .If you are considering using an Application Trigger to extend the lifetime of your foreground process, consider using Extended Execution instead. Der Anwendungs--Auslösung dient zum Erstellen eines separat gehosteten Prozesses, in dem gearbeitet werden soll.The Application Trigger is designed for creating a separately hosted process to do work in. Der folgende Code Ausschnitt registriert einen Out-of-Process-Hintergrund-Auslösers.The following code snippet registers an out-of-process background trigger.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example application trigger";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example application trigger";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);

Parameter für die Registrierung von Hintergrundaufgaben werden zum Zeitpunkt der Registrierung überprüft.Background task registration parameters are validated at the time of registration. Bei ungültigen Registrierungsparametern wird ein Fehler zurückgegeben.An error is returned if any of the registration parameters are invalid. Stellen Sie sicher, dass Ihre App problemlos mit Szenarien ohne erfolgreiche Registrierung von Hintergrundaufgaben zurechtkommt. Andernfalls stürzt die App unter Umständen ab, wenn sie so konzipiert ist, dass nach dem Versuch, eine Aufgabe zu registrieren, ein gültiges Registrierungsobjekt vorhanden sein muss.Ensure that your app gracefully handles scenarios where background task registration fails - if instead your app depends on having a valid registration object after attempting to register a task, it may crash.

Löst die Hintergrundaufgabe aus.Trigger the background task

Vergewissern Sie sich vor dem Ausführen der Hintergrundaufgabe mithilfe von backgroundtaskregistration , dass die Hintergrundaufgabe registriert ist.Before you trigger the background task, use BackgroundTaskRegistration to verify that the background task is registered. Ein guter Zeitpunkt, um zu überprüfen, ob alle Hintergrundaufgaben bei der APP-Start Registrierung registriert sind.A good time to verify that all of your background tasks are registered is during app launch.

Löst die Hintergrundaufgabe durch Aufrufen von applicationinsights. requestasyncaus.Trigger the background task by calling ApplicationTrigger.RequestAsync. Jede Application-auslöserinstanz wird durchführen.Any ApplicationTrigger instance will do.

Beachten Sie, dass " applicationinsights. requestasync " nicht von der Hintergrundaufgabe selbst aufgerufen werden kann oder wenn sich die APP im Hintergrund befindet (Weitere Informationen zu Anwendungs Zuständen finden Sie unter App-Lebenszyklus ).Note that ApplicationTrigger.RequestAsync can't be called from the background task itself, or when the app is in the background running state (see App lifecycle for more information about application states). Es kann " disabledbypolicy " zurückgeben, wenn der Benutzer Energie-oder Datenschutzrichtlinien festgelegt hat, die verhindern, dass die APP Hintergrund Aktivitäten ausführt.It may return DisabledByPolicy if the user has set energy or privacy policies that prevent the app from performing background activity. Außerdem kann jeweils nur ein App-Ereignis ausgeführt werden.Also, only one AppTrigger can run at a time. Wenn Sie versuchen, einen apptriggervorgang auszuführen, während ein anderer bereits ausgeführt wird, gibt die Funktion " currentlyrunning" zurück.If you attempt to run an AppTrigger while another is already running, the function will return CurrentlyRunning.

var result = await _AppTrigger.RequestAsync();

Verwalten von Ressourcen für Ihre HintergrundaufgabeManage resources for your background task

Um zu ermitteln, ob der Benutzer die Hintergrundaktivität Ihrer App begrenzt hat, verwenden Sie BackgroundExecutionManager.RequestAccessAsync.Use BackgroundExecutionManager.RequestAccessAsync to determine if the user has decided that your app’s background activity should be limited. Achten Sie auf die Akkunutzung, und führen Sie Ihre App nur dann im Hintergrund aus, wenn dies zum Ausführen einer vom Benutzer gewünschten Aktion notwendig ist.Be aware of your battery usage and only run in the background when it is necessary to complete an action that the user wants. Weitere Informationen zu den Möglichkeiten, mit denen Benutzer die Einstellungen für Hintergrund Aktivitäten steuern können, finden Sie unter Optimieren der Hintergrund Aktivität .See Optimize background activity for more information about the ways users can control the settings for background activity.

  • Arbeitsspeicher: das Optimieren des Arbeitsspeichers und des Energieverbrauchs ihrer APP ist entscheidend, um sicherzustellen, dass das Betriebssystem die Durchführung ihrer Hintergrundaufgabe zulässt.Memory: Tuning your app's memory and energy use is key to ensuring that the operating system will allow your background task to run. Verwenden Sie die Arbeitsspeicherverwaltungs-APIs , um anzuzeigen, wie viel Arbeitsspeicher von ihrer Hintergrundaufgabe verwendet wird.Use the Memory Management APIs to see how much memory your background task is using. Der mehr Arbeitsspeicher, den Ihre Hintergrundaufgabe verwendet, desto schwieriger ist es für das Betriebssystem, die Ausführung aufrechtzuerhalten, wenn sich eine andere APP im Vordergrund befindet.The more memory your background task uses, the harder it is for the OS to keep it running when another app is in the foreground. Der Benutzer hat letztendlich die Kontrolle über alle Hintergrundaktivitäten, die Ihre App ausführen kann, und kann die Auswirkungen Ihrer App auf den Akkuverbrauch erkennen.The user is ultimately in control of all background activity that your app can perform and has visibility on the impact your app has on battery use.
  • CPU-Zeit: Hintergrundaufgaben werden durch die Menge an Zeit, die auf dem auslösertyp basieren, auf die Zeitspanne beschränkt.CPU time: Background tasks are limited by the amount of wall-clock usage time they get based on trigger type. Hintergrundaufgaben, die vom Anwendungs Trigger ausgelöst werden, sind auf ungefähr 10 Minuten beschränkt.Background tasks triggered by the Application trigger are limited to about 10 minutes.

Die für Hintergrundaufgaben geltenden Ressourcenbeschränkungen finden Sie unter Unterstützen der App mit Hintergrundaufgaben.See Support your app with background tasks for the resource constraints applied to background tasks.

BemerkungenRemarks

Ab Windows 10 ist es nicht mehr erforderlich, dass der Benutzer die APP dem Sperrbildschirm hinzufügt, um Hintergrundaufgaben zu verwenden.Starting with Windows 10, it is no longer necessary for the user to add your app to the lock screen in order to utilize background tasks.

Ein Hintergrund Task wird nur mithilfe eines Application-Auslösers ausgeführt, wenn Sie zuerst " requestaccessasync " aufgerufen haben.A background task will only run using an ApplicationTrigger if you have called RequestAccessAsync first.