Verschieben der angehaltenen App mithilfe der erweiterten AusführungPostpone app suspension with extended execution

In diesem Artikel erfahren Sie, wie Sie die erweiterte Ausführung verwenden, um zu verschieben, wenn Ihre APP angehalten wird, sodass Sie während der Minimierung oder unter dem Sperrbildschirm ausgeführt werden kann.This article shows you how to use extended execution to postpone when your app is suspended so that it can run while minimized or under the lock screen.

Wenn der Benutzer eine App minimiert oder sie verlässt, wird sie in einen angehaltenen Zustand versetzt.When the user minimizes or switches away from an app it is put into a suspended state. Der Arbeitsspeicher wird nicht gelöscht, der App-Code wird jedoch nicht ausgeführt.Its memory is maintained, but its code does not run. Dies gilt für alle Betriebssystemeditionen mit einer grafischen Benutzeroberfläche.This is true across all OS Editions with a visual user interface. Weitere Informationen zum Anhalten von Apps finden Sie unter Anwendungslebenszyklus.For more details about when your app is suspended, see Application Lifecycle.

Es gibt Fälle, in denen eine APP möglicherweise weiterhin ausgeführt werden muss, anstatt angehalten zu werden, wenn der Benutzer von der APP weg navigiert oder minimiert wird.There are cases where an app may need to keep running, rather than be suspended, when the user navigates away from the app, or while it is minimized. Beispielsweise muss ein Schritt zum zählen der APP zum Ausführen und Nachverfolgen von Schritten ausgeführt werden, auch wenn der Benutzer zur Verwendung anderer apps navigiert.For example, a step counting app needs to keep running and tracking steps even when the user navigates away to use other apps.

Wenn eine App weiter ausgeführt muss, kann sie entweder vom Betriebssystem weiter ausgeführt werden, oder sie kann die weitere Ausführung anfordern.If an app needs to keep running, either the OS can keep it running, or it can request to keep running. Wenn beispielsweise im Hintergrund Audioinhalte wiedergegeben werden, kann das Betriebssystem eine App weiter ausführen, wenn Sie diese Schritte für Medienwiedergabe im Hintergrund ausführen.For example, when playing audio in the background, the OS can keep an app running longer if you follow these steps for Background Media Playback. Andernfalls müssen Sie manuell mehr Zeit anfordern.Otherwise, you must manually request more time. Die Zeit, die Sie für die Ausführung des Hintergrunds benötigen, kann mehrere Minuten in Anspruch nehmen. Sie müssen jedoch darauf vorbereitet sein, die Sitzung zu verarbeiten, die jederzeit widerrufen wird.The amount of time you may get to perform background execution may be several minutes but you must be prepared to handle the session being revoked at any time. Diese Anwendungslebenszyklus-Zeiteinschränkungen sind deaktiviert, während die APP unter einem Debugger ausgeführt wird.These application lifecycle time constraints are disabled while the app is running under a debugger. Aus diesem Grund ist es wichtig, die erweiterte Ausführung und andere Tools zum Verschieben der APP-Unterbrechung zu testen, während Sie nicht unter einem Debugger ausgeführt wird oder die in Visual Studio verfügbaren Lebenszyklus Ereignisse verwendet werden.For this reason it is important to test Extended Execution and other tools for postponing app suspension while not running under a debugger or by using the Lifecycle Events available in Visual Studio.

Um mehr Zeit für das Ausführen eines Vorgangs im Hintergrund anzufordern, erstellen Sie eine ExtendedExecutionSession.Create an ExtendedExecutionSession to request more time to complete an operation in the background. Die Art der von Ihnen erstellten ExtendedExecutionSession wird durch den ExtendedExecutionReason festgelegt, den Sie während des Erstellens angeben.The kind of ExtendedExecutionSession you create is determined by the ExtendedExecutionReason that you provide when you create it. Es gibt drei Enumerationswerte für ExtendedExecutionReason: Unspecified, LocationTracking und SavingData.There are three ExtendedExecutionReason enum values: Unspecified, LocationTracking and SavingData. Es kann immer nur eine " extendedexecutionsession " angefordert werden. Wenn Sie versuchen, eine andere Sitzung zu erstellen, während eine genehmigte Sitzungs Anforderung derzeit aktiv ist, wird die Ausnahme 0x8007139f vom extendedexecutionsession -Konstruktor ausgelöst, die angibt, dass die Gruppe oder die Ressource nicht den richtigen Status aufweist, um den angeforderten Vorgang auszuführen.Only one ExtendedExecutionSession can be requested at any time; attempting to create another session while an approved session request is currently active will cause exception 0x8007139F to be thrown from the ExtendedExecutionSession constructor stating that the group or resource is not in the correct state to perform the requested operation. Verwenden Sie nicht " extendedexecutionforegroundsession " und " extendedexecutionforegroundreason;". Sie benötigen eingeschränkte Funktionen und sind nicht für die Verwendung in Store-Anwendungen verfügbar.Do not use ExtendedExecutionForegroundSession and ExtendedExecutionForegroundReason; they require restricted capabilities and are not available for use in Store applications.

Ausführen bei MinimierungRun while minimized

Es gibt zwei Fälle, in denen die erweiterte Ausführung verwendet werden kann:There are two cases where extended execution can be used:

  • Zu einem beliebigen Zeitpunkt während der regulären Vordergrund Ausführung, während sich die Anwendung im Zustand wird ausgeführt befindet.At any point during regular foreground execution, while the application is in the running state.
  • Nachdem die Anwendung ein Anhalten-Ereignis empfangen hat (das Betriebssystem ist im Begriff, die app in den angehaltenen Zustand zu verschieben), wird der Ereignishandler der Anwendung angehalten.After the application has received a suspending event (the OS is about to move the app to the suspended state) in the application’s suspending event handler.

Der Code für diese beiden Fälle ist identisch, aber die Anwendung verhält sich in jedem wenig anders.The code for these two cases is the same, but the application behaves a little differently in each. Im ersten Fall verbleibt die Anwendung im Status wird ausgeführt, auch wenn ein Ereignis, das normalerweise eine Unterbrechung auslöst, auftritt (z. b. wenn der Benutzer von der Anwendung weg navigiert).In the first case, the application stays in the running state, even if an event that normally would trigger suspension occurs (for example, the user navigating away from the application). Die Anwendung empfängt niemals ein anhaltereignis, während die Ausführungs Erweiterung wirksam ist.The application will never receive a suspending event while the execution extension is in effect. Wenn die Erweiterung verworfen wird, kann die Anwendung wieder angehalten werden.When the extension is disposed, the application becomes eligible for suspension again.

Im zweiten Fall, wenn die Anwendung in den Zustand "angehalten" übergeht, bleibt Sie für den Zeitraum der Erweiterung im Zustand "angehalten".In the second case, if the application is transitioning to the suspended state, it will stay in a suspending state for the period of the extension. Nach Ablauf der Erweiterung wechselt die Anwendung ohne weitere Benachrichtigung in den Zustand "angehalten".Once the extension expires, the application enters the suspended state without further notification.

Verwenden Sie " extendedexecutionreason. unspezifiziert ", wenn Sie eine " extendedexecutionsession " erstellen, um zusätzliche Zeit anzufordern, bevor die APP für Szenarien wie Medienverarbeitung, Projekt Kompilierung oder Aufrechterhaltung einer Netzwerkverbindung in den Hintergrund wechselt.Use ExtendedExecutionReason.Unspecified when you create an ExtendedExecutionSession to request additional time before your app moves into the background for scenarios such as media processing, project compilation, or keeping a network connection alive. Auf Desktopgeräten, auf denen Windows 10-Editionen für Desktops ausgeführt werden (Home, Pro, Enterprise und Education), verwenden Sie diesen Ansatz, um zu vermeiden, dass eine App bei Minimierung angehalten wird.On desktop devices running Windows 10 for desktop editions (Home, Pro, Enterprise, and Education), this is the approach to use if an app needs to avoid being suspended while it is minimized.

Sie fordern die Erweiterung an, wenn ein über lange Zeit ausgeführter Vorgang gestartet wird, um den Wechsel in den Zustand Suspending zu verschieben, der andernfalls beim Verschieben der App in den Hintergrund ausgeführt wird.Request the extension when starting a long running operation in order to defer the Suspending state transition that otherwise occurs when the app moves into the background. Auf Desktopgeräten gibt es für mit ExtendedExecutionReason.Unspecified erstellte erweiterte Ausführungssitzungen eine akkubasierte zeitliche Begrenzung.On desktop devices, extended execution sessions created with ExtendedExecutionReason.Unspecified have a battery-aware time limit. Wenn das Gerät an eine Steckdose angeschlossen ist, gibt es keine zeitliche Begrenzung für die erweiterte Ausführung.If the device is connected to wall power, there is no limit to the length of the extended execution time period. Wenn das Gerät mit Akku betrieben wird, kann der Zeitraum für die erweiterte Ausführung im Hintergrund bis zu zehn Minuten betragen.If the device is on battery power, the extended execution time period can run up to ten minutes in the background.

Ein Tablet-oder Laptop Benutzer kann das gleiche Verhalten mit langer Ausführungszeit (auf Kosten der Akku Lebensdauer) erzielen, wenn die Option für die Ausführung von Hintergrundaufgaben für die App zulassen unter Akku Nutzung nach App -Einstellungen aktiviert ist.A tablet or laptop user can get the same long running behavior--at the expense of battery life--when the Allow the app to run background tasks option is selected in Battery usage by app settings. (Wechseln Sie zu " Einstellungen > ", um diese Option auf einem Laptop zu finden. System > Akku > Akku Auslastung nach App (der Link unter dem Prozentsatz der verbleibenden Akkuleistung) > wählen Sie eine APP aus, > Sie die Verwaltung durch Windows ausschalten > wählen Sie die Option App zum Ausführen von Hintergrundaufgaben zulassenaus.(To find this option on a laptop, go to Settings > System > Battery > Battery usage by App (the link under the percent of battery power remaining) > select an app > turn off Managed By Windows > select Allow app to run background tasks.

Diese Art der erweiterten Ausführung wird auf allen Betriebssystemeditionen beendet, wenn das Gerät in den Zustand „Verbundener Standbymodus“ versetzt wird.On all OS editions this kind of extended execution session stops when the device enters Connected Standby. Auf mobilen Geräten mit Windows 10 Mobile wird diese Art von erweiterter Ausführung solange ausgeführt, wie der Bildschirm aktiviert ist.On mobile devices running Windows 10 Mobile, this kind of extended execution session will run as long as the screen is on. Wenn der Bildschirm deaktiviert wird, versucht das Gerät sofort, in den energiesparenden Zustand „Verbundener Standbymodus“ zu wechseln.When the screen turns off, the device immediately attempts to enter the low-power Connected-Standby mode. Auf Desktopgeräten wird die Sitzung weiter ausgeführt, wenn der Sperrbildschirm angezeigt wird.On desktop devices, the session will continue running if the lock screen appears. Das Gerät wechselt nach Deaktivierung des Bildschirms für einen gewissen Zeitraum nicht in den Zustand „Verbundener Standbymodus“.The device does not enter Connected Standby for a period of time after the screen turns off. In der Xbox-Betriebssystemedition wechselt das Gerät nach einer Stunde in den Zustand „Verbundener Standbymodus“, wenn der Benutzer die Standardeinstellung nicht geändert hat.On the Xbox OS Edition, the device enters Connect Standby after one hour unless the user changes the default.

Abrufen des Standorts eines BenutzersTrack the user's location

Geben Sie beim Erstellen einer ExtendedExecutionSession****ExtendedExecutionReason.LocationTracking an, wenn Ihre App regelmäßig den Standort aus GeoLocator protokollieren muss.Specify ExtendedExecutionReason.LocationTracking when you create an ExtendedExecutionSession if your app needs to regularly log the location from the GeoLocator. Apps für Fitnessnachverfolgung und Navigation, die regelmäßig den Standort des Benutzers überwachen müssen, sollten diesen Grund verwenden.Apps for fitness tracking and navigation that need to regularly monitor the user's location and should use this reason.

Eine Standort Nachverfolgung der erweiterten Ausführungs Sitzung kann so lange wie nötig ausgeführt werden, auch wenn der Bildschirm auf einem mobilen Gerät gesperrt ist.A location tracking extended execution session can run as long as needed, including while the screen is locked on a mobile device. Pro Gerät kann jedoch nur eine solche Sitzung ausgeführt werden.However, there can only be one such session running per device. Eine erweiterte Ausführung zur Standortnachverfolgung kann nur im Vordergrund angefordert werden, und die App muss sich im Zustand Ausgeführt befinden.A location tracking extended execution session can only be requested in the foreground, and the app must be in the Running state. Dadurch wird sichergestellt, dass der Benutzer weiß, dass die App die erweiterte Ausführung zur Standortnachverfolgung initiiert hat.This ensures that the user is aware that the app has initiated an extended location tracking session. GeoLocator kann mittels einer Hintergrundaufgabe oder eines App-Diensts während der Ausführung der App im Hintergrund weiter verwendet werden, ohne dass eine erweiterte Ausführung zur Standortnachverfolgung angefordert wird.It is still possible to use the GeoLocator while the app is in the background by using a background task, or an app service, without requesting a location tracking extended execution session.

Lokales Speichern wichtiger DatenSave Critical Data Locally

Geben Sie beim Erstellen einer ExtendedExecutionSession****ExtendedExecutionReason.SavingData an, wenn Sie in Fällen, in das Nichtspeichern von Daten vor Beenden der App zu Datenverlusten und einer negativen Benutzererfahrung führt, Benutzerdaten speichern möchten.Specify ExtendedExecutionReason.SavingData when you create an ExtendedExecutionSession to save user data in the case where not saving the data before the app is terminated will result in data loss and a negative user experience.

Verwenden Sie diese Art von Sitzung nicht, um den Lebenszyklus einer App zum Zweck des Hoch- oder Herunterladens von Daten zu verlängern.Don't use this kind of session to extend the lifetime of an app to upload or download data. Fordern Sie eine Hintergrundübertragung an, wenn Sie Daten hochladen müssen, oder registrieren Sie einen MaintenanceTrigger, um die Übertragung zu verarbeiten, wenn die Stromversorgung verfügbar ist.If you need to upload data, request a background transfer or register a MaintenanceTrigger to handle the transfer when AC power is available. Eine erweiterte Ausführungssitzung mit dem Grund ExtendedExecutionReason.SavingData kann angefordert werden, wenn sich die App im Vordergrund und im Zustand Ausgeführt befindet oder wenn sie sich im Hintergrund und im Zustand Angehalten befindet.A ExtendedExecutionReason.SavingData extended execution session can be requested either when the app is in the foreground and in the Running state, or in the background and in the Suspending state.

Der Zustand Angehalten ist die letzte Phase während des App-Lebenszyklus, in der die App Aufgaben ausführen kann, bevor sie beendet wird.The Suspending state is the last opportunity during the app lifecycle that an app can do work before the app is terminated. " Extendedexecutionreason. savingdata " ist der einzige Typ von " extendedexecutionsession " , der im anhaltezustand angefordert werden kann.ExtendedExecutionReason.SavingData is the only type of ExtendedExecutionSession that can be requested in the Suspending state. Das Anfordern einer erweiterten Ausführungssitzung mit dem Grund ExtendedExecutionReason.SavingData, während sich die App im Zustand Angehalten befindet, kann ein Problem verursachen, das Sie beachten sollten.Requesting a ExtendedExecutionReason.SavingData extended execution session while the app is in the Suspending state creates a potential issue that you should be aware of. Wenn im Zustand Suspending eine erweiterte Ausführungssitzung angefordert wird, und der Benutzer das erneute Starten der App anfordert, benötigt sie zum Starten scheinbar eine lange Zeit.If an extended execution session is requested while in the Suspending state, and the user requests the app be launched again, it may appear to take a long time to launch. Der Grund hierfür ist, dass die erweiterte Ausführungssitzung abgeschlossen werden muss, bevor die alte Instanz der App geschlossen und eine neue Instanz der App gestartet werden kann.This is because the extended execution session time period must complete before the old instance of the app can be closed and a new instance of the app can be launched. Es wird auf Leistung beim Starten verzichtet, um sicherzustellen, dass der Benutzerstatus nicht verloren geht.Launch performance time is sacrificed in order to guarantee that user state is not lost.

Anfordern, Löschen und SperrenRequest, disposal, and revocation

Es gibt drei grundsätzliche Interaktionen mit erweiterten Ausführungssitzungen: Anfordern, Löschen und Sperren.There are three fundamental interactions with an extended execution session: the request, disposal, and revocation. Das Anfordern wird im folgenden Codeausschnitt gezeigt.Making the request is modeled in the following code snippet.

AnforderungRequest

var newSession = new ExtendedExecutionSession();
newSession.Reason = ExtendedExecutionReason.Unspecified;
newSession.Revoked += SessionRevoked;
ExtendedExecutionResult result = await newSession.RequestExtensionAsync();

switch (result)
{
    case ExtendedExecutionResult.Allowed:
        DoLongRunningWork();
        break;

    default:
    case ExtendedExecutionResult.Denied:
        DoShortRunningWork();
        break;
}

Siehe CodebeispielSee code sample

Durch Aufrufen von RequestExtensionAsync wird durch das Betriebssystem geprüft, ob der Benutzer Hintergrundaktivitäten für die App genehmigt hat und ob das System über genügend Ressourcen verfügt, um die Hintergrundausführung zu aktivieren.Calling RequestExtensionAsync checks with the operating system to see if the user has approved background activity for the app and whether the system has the available resources to enable background execution. Nur eine Sitzung wird für eine APP zu einem beliebigen Zeitpunkt genehmigt. Dies führt zu weiteren Aufrufen von requestextensionasync , um zu verhindern, dass die Sitzung verweigert wird.Only one session will be approved for an app at any time, causing additional calls to RequestExtensionAsync to result in the session being denied.

Sie können BackgroundExecutionManager im Voraus überprüfen, um den BackgroundAccessStatus zu ermitteln. Dies ist die Benutzereinstellung, die festlegt, ob Ihre App im Hintergrund ausgeführt werden kann oder nicht.You can check the BackgroundExecutionManager beforehand to determine the BackgroundAccessStatus, which is the user setting that indicates whether your app can run in the background or not. Weitere Informationen zu diesen Benutzereinstellungen finden Sie unter Hintergrundaktivitäten und Energieinformationen.To learn more about these user settings see Background Activity and Energy Awareness.

Der ExtendedExecutionReason gibt den Vorgang an, der von Ihrer App im Hintergrund ausgeführt wird.The ExtendedExecutionReason indicates the operation your app is performing in the background. Die Zeichenfolge Beschreibung ist eine lesbare Zeichenfolge, die beschreibt, warum Ihre App den Vorgang ausführen muss.The Description string is a human-readable string that explains why your app needs to perform the operation. Diese Zeichenfolge wird dem Benutzer nicht angezeigt, wird jedoch möglicherweise in einer zukünftigen Version von Windows zur Verfügung gestellt.This string is not presented to the user, but may be made available in a future release of Windows. Der Ereignishandler Revoked ist erforderlich, damit eine erweiterte Ausführungssitzung ordnungsgemäß angehalten werden kann, wenn der Benutzer oder das System festlegen, dass die App nicht mehr im Hintergrund ausgeführt werden kann.The Revoked event handler is required so that an extended execution session can halt gracefully if the user, or the system, decides that the app can no longer run in the background.

WiderrufenRevoked

Wenn eine APP über eine aktive erweiterte Ausführungs Sitzung verfügt und das System die Hintergrund Aktivität zum Anhalten benötigt, weil eine Vordergrund Anwendung die Ressourcen benötigt, wird die Sitzung widerrufen.If an app has an active extended execution session and the system requires background activity to halt because a foreground application requires the resources, then the session is revoked. Der Zeitraum für eine erweiterte Ausführungssitzung wird nie beendet, ohne dass zuerst der Ereignishandler Revoked aufgerufen wird.An extended execution session time period is never terminated without first firing the Revoked event handler.

Wenn das Ereignis Revoked für eine erweiterte Ausführungssitzung mit dem Grund ExtendedExecutionReason.SavingData ausgelöst wird, hat die App nur eine Sekunde Zeit, um den gerade ausgeführten Vorgang abzuschließen und den Zustand Angehalten zu beenden.When the Revoked event is fired for an ExtendedExecutionReason.SavingData extended execution session, the app has one second to complete the operation it was performing and finish Suspending.

Das Sperren kann aus verschiedenen Gründen erfolgen: das Erreichen der zeitlichen Begrenzung für die Ausführung, das Erreichen der Begrenzung für den Energieverbrauch für Hintergrundaufgaben oder das notwendige Freigeben von Arbeitsspeicher, damit der Benutzer eine neue App im Vordergrund öffnen kann.Revocation can occur for many reasons: an execution time limit was reached, a background energy quota was reached, or memory needs to be reclaimed in order for the user to open a new app in the foreground.

Im Folgenden wird Ihnen ein Beispiel für den Ereignishandler „Revoked“ angezeigt:Here is an example of a Revoked event handler:

private async void SessionRevoked(object sender, ExtendedExecutionRevokedEventArgs args)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        switch (args.Reason)
        {
            case ExtendedExecutionRevokedReason.Resumed:
                rootPage.NotifyUser("Extended execution revoked due to returning to foreground.", NotifyType.StatusMessage);
                break;

            case ExtendedExecutionRevokedReason.SystemPolicy:
                rootPage.NotifyUser("Extended execution revoked due to system policy.", NotifyType.StatusMessage);
                break;
        }

        EndExtendedExecution();
    });
}

Siehe CodebeispielSee code sample

DisposeDispose

Der letzte Schritt besteht im Löschen der erweiterten Ausführungssitzung.The final step is to dispose of the extended execution session. Sie sollten die Sitzung und alle weiteren, Arbeitsspeicher in Anspruch nehmenden Ressourcen löschen, da andernfalls die von der App beim Warten auf das Beenden der Sitzung verbrauchte Energie auf das Energiekontingent der App angerechnet wird.You want to dispose of the session, and any other memory intensive assets, because otherwise the energy used by the app while it is waiting for the session to close will be counted against the app's energy quota. Um einen möglichst großen Teil des Energiekontingents der App zu bewahren, ist es wichtig, die Sitzung zu löschen, wenn sie nicht mehr benötigt wird, damit die App schneller in den Zustand Angehalten wechseln kann.To preserve as much of the energy quota for the app as possible, it is important to dispose of the session when you are done with your work for the session so that the app can move into the Suspended state more quickly.

Wenn Sie die Sitzung selbst löschen, statt auf das Sperrereignis zu warten, wird die Energiekontingentnutzung Ihrer App reduziert.Disposing of the session yourself, rather than waiting for the revocation event, reduces your app's energy quota usage. Das bedeutet, dass Ihre App zukünftig länger im Hintergrund ausgeführt werden darf, da ihr hierfür ein größeres Energiekontingent zur Verfügung steht.This means that your app will be permitted to run in the background longer in future sessions because you'll have more energy quota available to do so. Sie müssen bis zum Abschluss des Vorgangs einen Verweis auf das Objekt ExtendedExecutionSession beibehalten, damit Sie dessen Methode Dispose aufrufen können.You must maintain a reference to the ExtendedExecutionSession object until the end of the operation so that you can call its Dispose method.

Im Folgenden wird ein Codeausschnitt angezeigt, in dem eine erweiterte Ausführungssitzung gelöscht wird:A snippet that disposes an extended execution session follows:

void ClearExtendedExecution(ExtendedExecutionSession session)
{
    if (session != null)
    {
        session.Revoked -= SessionRevoked;
        session.Dispose();
        session = null;
    }
}

Siehe CodebeispielSee code sample

Für eine App kann jeweils nur eine ExtendedExecutionSession aktiv sein.An app can only have one ExtendedExecutionSession active at a time. Viele Apps verwenden asynchrone Aufgaben, um komplexe Vorgänge ausführen, die Zugriff auf Ressourcen wie Speicher, Netzwerk oder netzwerkbasierte Dienste erfordern.Many apps use asynchronous tasks in order to complete complex operations that require access to resources such as storage, network, or network-based services. Wenn ein Vorgang mehrere asynchrone Vorgänge erfordert, um abgeschlossen zu werden, muss der Zustand jeder dieser Aufgaben berücksichtigt werden, bevor ExtendedExecutionSession gelöscht wird und die App angehalten werden kann.If an operation requires multiple asynchronous tasks to complete, then the state of each of these tasks must be accounted for before disposing the ExtendedExecutionSession and allowing the app to be suspended. Dies erfordert eine Verweiszählung der Anzahl der Aufgaben, die weiter ausgeführt werden. Erst wenn dieser Wert null erreicht, kann die Sitzung gelöscht werden.This requires reference counting the number of tasks that are still running, and not disposing of the session until that value reaches zero.

Im folgenden finden Sie einen Beispielcode für die Verwaltung mehrerer Tasks während eines Zeitraums für die erweiterte Ausführungs Sitzung.Here is some example code for managing multiple tasks during an extended execution session period. Weitere Informationen zur Verwendung dieses in ihrer App finden Sie im folgenden Codebeispiel:For more information on how to use this in your app please see the code sample linked below:

static class ExtendedExecutionHelper
{
    private static ExtendedExecutionSession session = null;
    private static int taskCount = 0;

    public static bool IsRunning
    {
        get
        {
            if (session != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

    public static async Task<ExtendedExecutionResult> RequestSessionAsync(ExtendedExecutionReason reason, TypedEventHandler<object, ExtendedExecutionRevokedEventArgs> revoked, String description)
    {
        // The previous Extended Execution must be closed before a new one can be requested.       
        ClearSession();

        var newSession = new ExtendedExecutionSession();
        newSession.Reason = reason;
        newSession.Description = description;
        newSession.Revoked += SessionRevoked;

        // Add a revoked handler provided by the app in order to clean up an operation that had to be halted prematurely
        if(revoked != null)
        {
            newSession.Revoked += revoked;
        }

        ExtendedExecutionResult result = await newSession.RequestExtensionAsync();

        switch (result)
        {
            case ExtendedExecutionResult.Allowed:
                session = newSession;
                break;
            default:
            case ExtendedExecutionResult.Denied:
                newSession.Dispose();
                break;
        }
        return result;
    }

    public static void ClearSession()
    {
        if (session != null)
        {
            session.Dispose();
            session = null;
        }

        taskCount = 0;
    }

    public static Deferral GetExecutionDeferral()
    {
        if (session == null)
        {
            throw new InvalidOperationException("No extended execution session is active");
        }

        taskCount++;
        return new Deferral(OnTaskCompleted);
    }

    private static void OnTaskCompleted()
    {
        if (taskCount > 0)
        {
            taskCount--;
        }
        
        //If there are no more running tasks than end the extended lifetime by clearing the session
        if (taskCount == 0 && session != null)
        {
            ClearSession();
        }
    }

    private static void SessionRevoked(object sender, ExtendedExecutionRevokedEventArgs args)
    {
        //The session has been prematurely revoked due to system constraints, ensure the session is disposed
        if (session != null)
        {
            session.Dispose();
            session = null;
        }
        
        taskCount = 0;
    }
}

Siehe CodebeispielSee code sample

Gute Nutzung von Ressourcen durch Ihre AppEnsure that your app uses resources well

Das Optimieren von Arbeitsspeicher und Energieverbrauch Ihrer App ist der Schlüssel, um sicherzustellen, dass das Betriebssystem die Ausführung Ihrer App auch dann zulässt, wenn sie sich nicht mehr im Vordergrund befindet.Tuning your app's memory and energy use is key to ensuring that the operating system will allow your app to continue to run when it is no longer the foreground app. Um zu ermitteln, wie viel Arbeitsspeicher Ihre App verwendet, verwenden Sie die Speicherverwaltungs-APIs.Use the Memory Management APIs to see how much memory your app is using. Je mehr Arbeitsspeicher Ihre App verwendet, desto schwieriger wird es für das Betriebssystem, Ihre App weiter auszuführen, wenn sich eine andere App im Vordergrund befindet.The more memory your app uses, the harder it is for the OS to keep your app 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.

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 InformationenSee also

Beispiel für die erweiterte AusführungExtended Execution Sample
AnwendungslebenszyklusApplication Lifecycle
App-Lebenszyklus: sorgen Sie für aktive apps mit Hintergrundaufgaben und erweiterter Ausführung Hintergrund SpeicherverwaltungApp Lifecycle - Keep Apps Alive with Background Tasks and Extended Execution Background Memory Management
Hintergrund ÜbertragungenBackground Transfers
Akku Bewusstsein und Hintergrund AktivitätBattery Awareness and Background Activity
MemoryManager-KlasseMemoryManager class
Wiedergeben von Medien im HintergrundPlay Media in the Background