Lebenszyklus von Windows 10-UWP-Apps (Universelle Windows-Plattform)Windows 10 universal Windows platform (UWP) app lifecycle

In diesem Thema wird der Lebenszyklus einer UWP-App (Universelle Windows-Plattform) vom Starten bis zum Schließen beschrieben.This topic describes the lifecycle of a Universal Windows Platform (UWP) app from the time it is launched until it is closed.

Etwas zur VorgeschichteA little history

Vor Windows 8 hatten Apps einen einfachen Lebenszyklus.Before Windows 8, apps had a simple lifecycle. Win32- und. NET-Apps werden entweder ausgeführt oder nicht.Win32 and .NET apps are either running or not running. Wenn ein Benutzer eine App minimiert oder verlässt, wird sie weiterhin ausgeführt.When a user minimizes them, or switches away from them, they continue to run. Dies war in Ordnung, bis tragbare Geräte und die effiziente Energienutzung immer wichtiger wurden.This was fine until portable devices and power management became increasingly important.

Mit Windows 8 wurde ein neues Anwendungsmodell mit UWP-apps eingeführt.Windows 8 introduced a new application model with UWP apps. Auf oberer Ebene wurde der neue Zustand „Angehalten“ eingeführt.At a high level, a new suspended state was added. Eine UWP-APP wird kurz nach dem minimieren oder wechseln zu einer anderen APP angehalten.A UWP app is suspended shortly after the user minimizes it or switches to another app. Das bedeutet, dass die App-Threads angehalten werden und die App im Arbeitsspeicher verbleibt, es sei denn, das Betriebssystem muss Ressourcen zurückfordern.This means that the app's threads are stopped and the app is left in memory unless the operating system needs to reclaim resources. Wenn der Benutzer zur App zurückkehrt, kann sie schnell wieder in den Zustand „Ausgeführt“ versetzt werden.When the user switches back to the app, it can be quickly restored to a running state.

Es gibt verschiedene Möglichkeiten für Apps, die im Hintergrund weiter ausgeführt werden müssen, z. B. Hintergrundaufgaben oder Apps mit erweiterter Ausführung und aktivitätsgestützter Ausführung. (Durch die BackgroundMediaEnabled-Funktion kann eine App beispielsweise weiterhin Medien im Hintergrund wiedergeben.)There are various ways for apps that need to continue to run when they are in the background such as background tasks, extended execution, and activity sponsored execution (for example, the BackgroundMediaEnabled capability which allows an app to continue to play media in the background). Darüber hinaus können Hintergrundübertragungen selbst dann fortgesetzt werden, wenn die App angehalten oder sogar beendet wurde.Also, background transfer operations can continue even if your app is suspended or even terminated. Weitere Informationen finden Sie unter So wird’s gemacht: Herunterladen einer Datei.For more info, see How to download a file.

Apps, die sich nicht im Vordergrund befinden, werden standardmäßig angehalten. Dies führt zu Energieeinsparungen und dazu, dass mehr Ressourcen für die derzeit im Vordergrund ausgeführte App zur Verfügung stehen.By default, apps that are not in the foreground are suspended which results in power savings and more resources available for the app currently in the foreground.

Der Zustand „Angehalten“ stellt neue Anforderungen an Entwickler, da das Betriebssystem entscheiden kann, eine angehaltene App zu beenden, um Ressourcen freizugeben.The suspended state adds new requirements for you as a developer because the operating system may elect to terminate a suspended app in order to free up resources. Die beendete App wird weiterhin in der Taskleiste angezeigt.The terminated app will still appear in the task bar. Wenn der Benutzer darauf klickt, muss die App ihren Zustand vor dem Beenden wiederherstellen, da dem Benutzer nicht bewusst ist, dass die App vom System geschlossen wurde.When the user click on it, the app must restore the state that it was in before it was terminated because the user will not be aware that the system closed the app. Er geht davon aus, dass die App im Hintergrund gewartet hat, während er andere Aufgaben erledigt hat, und erwartet, dass sie denselben Zustand wie zu dem Zeitpunkt aufweist, als er die App verlassen hat.They will think that it has been waiting in the background while they were doing other things and will expect it to be in the same state it was in when they left it. In diesem Thema wird erläutert, wie Sie dies erreichen.In this topic we will look at how to accomplish that.

In Windows 10, Version 1607, werden zwei weitere Zustände im App-Modell eingeführt: die Ausführung im Vordergrund und die Ausführung im Hintergrund.Windows 10, version 1607, introduces two more app model states: Running in foreground and Running in background. In den folgenden Abschnitten werden auch diese neuen Zustände eingehender betrachtet.We will also look at these new states in the sections that follow.

App-AusführungszustandApp execution state

In der folgenden Abbildung sind die möglichen Zustände im App-Modell dargestellt, die ab Windows 10, Version 1607, möglich sind.This illustration represents the possible app model states starting in Windows 10, version 1607. Sehen wir uns den typischen Lebenszyklus einer UWP-APP an.Let's walk through the typical lifecycle of a UWP app.

Zustandsdiagramm mit Übergängen zwischen App-Ausführungszuständen

Apps treten in den Zustand „Ausführung im Hintergrund“ ein, wenn sie gestartet oder aktiviert werden.Apps enter the running in background state when they are launched or activated. Wenn die APP aufgrund eines Starts der Vordergrund-app in den Vordergrund verschoben werden muss, ruft die APP das leavingbackground -Ereignis ab.If the app needs to move into the foreground due to a foreground app launch, the app then gets the LeavingBackground event.

Obwohl "gestartet" und "aktiviert" möglicherweise ähnliche Begriffe scheinen, verweisen Sie auf unterschiedliche Möglichkeiten, wie das Betriebssystem Ihre APP starten kann.Although "launched" and "activated" may seem like similar terms, they refer to different ways the operating system may start your app. Zunächst betrachten wir das Starten einer App.Let's first look at launching an app.

Starten einer AppApp launch

Die OnLaunched-Methode wird aufgerufen, wenn eine App gestartet wird.The OnLaunched method is called when an app is launched. An die Methode wird ein LaunchActivatedEventArgs-Parameter übergeben, der u. a. die an die App übergebenen Argumente, den Bezeichner der Kachel, durch die die App gestartet wurde, und den vorherigen Zustand der App bereitstellt.It is passed a LaunchActivatedEventArgs parameter which provides, among other things, the arguments passed to the app, the identifier of the tile that launched the app, and the previous state that the app was in.

Den vorherigen Zustand Ihrer App können Sie von der LaunchActivatedEventArgs.PreviousExecutionState-Eigenschaft abrufen, die eine ApplicationExecutionState-Enumeration zurückgibt.Get the previous state of your app from LaunchActivatedEventArgs.PreviousExecutionState which returns an ApplicationExecutionState. Im Folgenden sind die Werte und die Aktionen aufgeführt, die im jeweiligen Zustand ausgeführt werden sollten:Its values and the appropriate action to take due to that state are as follows:

ApplicationExecutionStateApplicationExecutionState ErklärungExplanation Auszuführende AktionAction to take
NichtAktivNotRunning Eine App kann diesen Zustand aufweisen, wenn sie seit dem letzten Neustart oder der letzten Anmeldung durch den Benutzer nicht gestartet wurde.An app could be in this state because it hasn't been launched since the last time the user rebooted or logged in. Sie kann sich auch in diesem Zustand befinden, wenn sie während der Ausführung abgestürzt ist oder weil sie zuvor vom Benutzer geschlossen wurde.It can also be in this state if it was running but then crashed, or because the user closed it earlier. Initialisieren Sie die App, als würde sie erstmalig in der aktuellen Benutzersitzung ausgeführt.Initialize the app as if it is running for the first time in the current user session.
AngehaltenSuspended Der Benutzer hat die App entweder minimiert oder verlassen und ist nicht innerhalb weniger Sekunden zurückgekehrt.The user either minimized or switched away from your app and didn't return to it within a few seconds. Beim Anhalten der App wurde ihr Zustand im Arbeitsspeicher beibehalten.When the app was suspended, its state remained in memory. Sie müssen lediglich Dateihandles oder andere Ressourcen erneut abrufen, die beim Anhalten der App freigegeben wurden.You only need to reacquire any file handles or other resources you released when the app was suspended.
BeendetTerminated Die App wurde zuvor angehalten, dann aber irgendwann beendet, weil das System Arbeitsspeicher freigeben musste.The app was previously suspended but was then shutdown at some point because the system needed to reclaim memory. Stellen Sie den Zustand wieder her, in dem sich die App befand, als der Benutzer daraus gewechselt hat.Restore the state that the app was in when the user switched away from it.
ClosedByUserClosedByUser Der Benutzer hat die App im Tablet-Modus mit der Geste zum Schließen oder mit ALT+F4 geschlossen.The user closed the app with the close gesture in tablet mode, or with Alt+F4. Wenn der Benutzer die App schließt, wird sie zunächst angehalten und anschließend beendet.When the user closes the app, it is first suspended and then terminated. Da die App im Wesentlichen dieselben Phasen durchlaufen hat, die zum Zustand „Terminated“ führen, behandeln Sie sie genauso wie eine App im Zustand „Terminated“.Because the app has essentially gone through the same steps that lead to the Terminated state, handle this the same way you would the Terminated state.
Wird ausgeführtRunning Die App war bereits geöffnet, als der Benutzer versucht hat, sie erneut zu starten.The app was already open when the user tried to launch it again. Nichts.Nothing. Beachten Sie, dass keine weitere App-Instanz gestartet wird.Note that another instance of your app is not launched. Es wird einfach die bereits ausgeführte Instanz aktiviert.The already running instance is simply activated.

Hinweis  Aktuelle Benutzersitzung basiert auf Windows-Anmeldung.Note  Current user session is based on Windows logon. Solange sich der aktuelle Benutzer nicht abgemeldet oder Windows heruntergefahren oder neu gestartet hat, bleibt die aktuelle Benutzersitzung unabhängig von bestimmten Ereignissen – wie Sperrbildschirmauthentifizierung, Benutzerwechsel usw. – bestehen.As long as the current user hasn't logged off, shut down, or restarted Windows, the current user session persists across events such as lock screen authentication, switch-user, and so on. 

Folgendes sollte unbedingt beachtet werden: Wenn das Gerät über genügend Ressourcen verfügt, startet das Betriebssystem häufig verwendete Apps, für die dieses Verhalten zulässig ist, vorab, um die Reaktionsfähigkeit zu verbessern.One important circumstance to be aware of is that if the device has sufficient resources, the operating system will prelaunch frequently used apps that have opted in for that behavior in order to optimize responsiveness. Eine vorab gestartete App wird Hintergrund gestartet und dann schnell angehalten. Bei Bedarf kann sie fortgesetzt werden, wodurch der Benutzer schneller darauf zugreifen kann als bei einem Start der App.Apps that are prelaunched are launched in the background and then quickly suspended so that when the user switches to them, they can be resumed which is faster than launching the app.

Aufgrund des Vorabstarts kann die OnLaunched()-Methode der App eher vom System als vom Benutzer initiiert werden.Because of prelaunch, the app’s OnLaunched() method may be initiated by the system rather than by the user. Da der Vorabstart der App im Hintergrund erfolgt, müssen Sie in OnLaunched() u. U. unterschiedlich darauf reagieren.Because the app is prelaunched in the background you may need to take different action in OnLaunched(). Wenn die App nach dem Starten beispielsweise Musik wiedergibt, weiß keiner, woher der Sound kommt, weil die App im Hintergrund vorab gestartet wurde.For example, if your app starts playing music when launched, they will not know where it is coming from because the app is prelaunched in the background. Auf den Vorabstart der App im Hintergrund folgt ein Aufruf von Application.Suspending.Once your app is prelaunched in the background, it is followed by a call to Application.Suspending. Wenn der Benutzer die App dann startet, wird sowohl das resuming-Ereignis als auch die OnLaunched()-Methode aufgerufen.Then, when the user does launch the app, the resuming event is invoked as well as the OnLaunched() method. Weitere Informationen dazu, wie Sie beim Vorabstartszenario vorgehen, finden Sie unter Behandeln des Vorabstarts von Apps.See Handle app prelaunch for additional information about how to handle the prelaunch scenario. Es werden nur Apps vorab gestartet, für die dieser Vorgang zulässig ist.Only apps that opt-in are prelaunched.

Beim Start einer App zeigt Windows einen Begrüßungsbildschirm für die App an.Windows displays a splash screen for the app when it is launched. Informationen zum Konfigurieren des Begrüßungs Bildschirms finden Sie unter Hinzufügen eines Begrüßungs Bildschirms.To configure the splash screen, see Adding a splash screen.

Während der Begrüßungsbildschirm angezeigt wird, sollte die App Ereignishandler registrieren und eine angepasste Benutzeroberfläche einrichten, die sie für die Startseite benötigt.While the splash screen is displayed, your app should register event handlers and set up any custom UI it needs for the initial page. Diese im Konstruktor der Anwendung und in OnLaunched() ausgeführten Aufgaben sollten möglichst innerhalb weniger Sekunden abgeschlossen sein, damit das System nicht annimmt, dass Ihre App nicht mehr reagiert, und sie beendet.See that these tasks running in the application’s constructor and OnLaunched() are completed within a few seconds or the system may think your app is unresponsive and terminate it. Wenn eine App Daten aus dem Netzwerk anfordern oder große Datenmengen von einem Datenträger abrufen muss, sollten diese Aktivitäten außerhalb des Startvorgangs erfolgen.If an app needs to request data from the network or needs to retrieve large amounts of data from disk, these activities should be completed outside of launch. Eine App kann ihre eigene angepasste Ladebenutzeroberfläche oder einen erweiterten Begrüßungsbildschirm verwenden, während sie auf den Abschluss von Vorgängen mit langer Ausführungsdauer wartet.An app can use its own custom loading UI or an extended splash screen while it waits for long running operations to finish. Weitere Infos finden Sie unter Längere Anzeige des Begrüßungsbildschirms und im Beispiel für einen Begrüßungsbildschirm.See Display a splash screen for more time and the Splash screen sample for more info.

Nach Abschluss des App-Starts wechselt die App in den Zustand Ausgeführt, und der Begrüßungsbildschirm sowie alle zugehörigen Ressourcen und Objekte werden ausgeblendet.After the app completes launching, it enters the Running state and the splash screen disappears and all splash screen resources and objects are cleared.

Aktivieren einer AppApp activation

Eine App kann nicht nur vom Benutzer gestartet, sondern auch vom System aktiviert werden.In contrast to being launched by the user, an app can be activated by the system. Eine App kann durch einen Vertrag wie den Freigabe-Vertrag aktiviert werden.An app may be activated by a contract such as the share contract. Sie kann auch aktiviert werden, um ein benutzerdefiniertes URI-Protokoll oder eine Datei mit einer Erweiterung zu verarbeiten, für deren Verarbeitung die App registriert ist.Or it may be activated to handle a custom URI protocol or a file with an extension that your app is registered to handle. Eine Liste der Methoden zum Aktivieren Ihrer App finden Sie unter ActivationKind.For a list of ways your app can be activated, see ActivationKind.

Die Windows.UI.Xaml.Application-Klasse definiert Methoden, die überschrieben werden können, um die unterschiedlichen Möglichkeiten zum Aktivieren der App zu behandeln.The Windows.UI.Xaml.Application class defines methods you can override to handle the various ways your app may be activated. OnActivated kann alle möglichen Aktivierungstypen behandeln.OnActivated can handle all possible activation types. Üblicherweise werden die meistverwendeten Aktivierungstypen jedoch mit spezifischen Methoden behandelt, während OnActivated als Fallbackmethode für weniger verbreitete Aktivierungstypen verwendet wird.However, it's more common to use specific methods to handle the most common activation types, and use OnActivated as the fallback method for the less common activation types. Im Folgenden die zusätzlichen Methoden für spezifische Aktivierungen:These are the additional methods for specific activations:

OnCachedFileUpdaterActivatedOnCachedFileUpdaterActivated
OnFileActivatedOnFileActivated
Onfileopenpickeraktivierte onfilesavepickeraktivierteOnFileOpenPickerActivated OnFileSavePickerActivated
OnSearchActivatedOnSearchActivated
OnShareTargetActivatedOnShareTargetActivated

Die Ereignisdaten für diese Methoden enthalten dieselbe PreviousExecutionState-Eigenschaft wie oben, an der Sie erkennen, in welchem Zustand sich die App vor der Aktivierung befunden hat.The event data for these methods includes the same PreviousExecutionState property that we saw above, which tells you which state your app was in before it was activated. Um den Zustand zu interpretieren und die auszuführende Aktion zu ermitteln, gehen Sie auf dieselbe Weise vor, wie oben im Abschnitt Starten einer App beschrieben.Interpret the state and what you should do it the same way as described above in the App launch section.

Hinweis   Wenn Sie sich mit dem Administrator Konto des Computers anmelden, können Sie keine UWP-Apps aktivieren.Note If you log on using the computer's Administrator account, you can't activate UWP apps.

Ausführung im HintergrundRunning in the background

Ab Windows 10, Version 1607, können Apps Hintergrundaufgaben im selben Prozess wie die App selbst ausführen.Starting with Windows 10, version 1607, apps can run background tasks within the same process as the app itself. Weitere Informationen dazu finden Sie unter Hintergrundaktivität mit dem Einzelprozessmodell.Read more about it in Background activity with the Single Process Model. In diesem Artikel gehen wir nicht weiter auf die In-Process-Verarbeitung im Hintergrund ein. Sie beeinflusst den App-Lebenszyklus jedoch insofern, dass zwei neue Ereignisse implementiert wurden, die sich auf die Ausführung der App im Hintergrund beziehen.We won't go into in-process background processing in this article, but how this impacts the app lifecycle is that two new events have been added related to when your app is in the background. Die Ereignisse sind EnteredBackground und LeavingBackground.They are: EnteredBackground and LeavingBackground.

Sie geben auch wieder, ob die Benutzeroberfläche Ihrer App für den Benutzer sichtbar ist.These events also reflect whether the user can see your app's UI.

Die Hintergrundausführung ist der Standardzustand, in dem eine Anwendung gestartet, aktiviert oder fortgesetzt wird.Running in the background is the default state that an application is launched, activated, or resumed into. In diesem Zustand ist die Benutzeroberfläche Ihrer Anwendung noch nicht sichtbar.In this state your application UI is not visible yet.

Ausführung im VordergrundRunning in the foreground

Bei der Ausführung im Vordergrund ist die Benutzeroberfläche Ihrer App sichtbar.Running in the foreground means that your app's UI is visible.

Das LeavingBackground-Ereignis wird ausgelöst, kurz bevor die Benutzeroberfläche der Anwendung sichtbar wird und der Zustand „Ausführung im Vordergrund“ eintritt.The LeavingBackground event is fired just before your application UI is visible and before entering the running in foreground state. Es wird auch ausgelöst, wenn der Benutzer wieder zu Ihrer App wechselt.It also fires when the user switches back to your app.

Zuvor war die beste Stelle zum Laden von UI-Ressourcen der Activated- oder Resuming-Ereignishandler.Previously, the best location to load UI assets was in the Activated or Resuming event handlers. Ab jetzt bietet LeavingBackground die beste Möglichkeit, zu überprüfen, ob die Benutzeroberfläche bereit ist.Now LeavingBackground is the best place to verify that your UI is ready.

Außerdem sollte bis zu diesem Zeitpunkt sichergestellt sein, dass visuelle Ressourcen einsatzbereit sind, da Sie hier letzte Hand anlegen können, bevor die Anwendung für den Benutzer sichtbar wird.It is important to check that visual assets are ready by this time because this is the last opportunity to do work before your application is visible to the user. Alle UI-Vorgänge in diesem Ereignishandler sollten schnell abgeschlossen sein, da sie die vom Benutzer empfundene Dauer bis zum Starten oder Fortsetzen der App beeinflussen.All UI work in this event handler should complete quickly, as it impacts the launch and resume time that the user experiences. In LeavingBackground sollte sichergestellt werden, dass der erste UI-Frame einsatzbereit ist.LeavingBackground is the time to ensure the first frame of UI is ready. Anschließend sollten Speicher- oder Netzwerkaufrufe mit langer Ausführungsdauer asynchron behandelt werden, damit der Ereignishandler zurückgegeben werden kann.Then, long-running storage or network calls should be handled asynchronously so that the event handler may return.

Sobald der Benutzer die App verlässt, wechselt sie wieder in den Zustand „Ausführung im Hintergrund“.When the user switches away from your application, your app reenters the running in background state.

Zurückwechseln in den HintergrundzustandReentering the background state

Das EnteredBackground-Ereignis gibt an, dass die App nicht mehr im Vordergrund angezeigt wird.The EnteredBackground event indicates that your app is no longer visible in the foreground. Auf dem Desktop wird EnteredBackground ausgelöst, wenn Ihre App minimiert wird, und auf dem Handy, wenn der Benutzer zum Startbildschirm oder zu einer anderen App wechselt.On the desktop EnteredBackground fires when your app is minimized; on phone, when switching to the home screen or another app.

Verringern des Speicherbedarfs Ihrer AppReduce your app's memory usage

Da die App nicht mehr für den Benutzer sichtbar ist, bietet sich hier die Gelegenheit, das Rendern der Benutzeroberfläche und die Ausführung von Animationen zu beenden.Since your app is no longer visible to the user, this is the best place to stop UI rendering work and animations. Mit LeavingBackground können Sie diese Vorgänge erneut starten.You can use LeavingBackground to start that work again.

Falls Aufgaben im Hintergrund ausgeführt werden sollen, können Sie hier entsprechende Vorbereitungen treffen.If you are going to do work in the background, this is the place to prepare for it. Sie sollten MemoryManager.AppMemoryUsageLevel überprüfen und den von der App genutzten Arbeitsspeicher ggf. reduzieren, wenn sie im Hintergrund ausgeführt wird. So verringert sich das Risiko, dass die App vom System beendet wird, um Ressourcen freizugeben.It is best to check MemoryManager.AppMemoryUsageLevel and, if needed, reduce the amount of memory being used by your app when it is running in the background so that your app doesn't risk being terminated by the system to free up resources.

Weitere Details finden Sie unter Reduzieren der Speicherverwendung, wenn die App in den Hintergrundzustand eintritt.See Reduce memory usage when your app moves to the background state for more details.

Speichern des ZustandsSave your state

Der Ereignishandler für die Aussetzung ist der beste Ort zum Speichern des App-Zustands.The suspending event handler is the best place to save your app state. Wenn Sie jedoch im Hintergrund arbeiten (z. b. Audiowiedergabe, mit einer erweiterten Ausführungs Sitzung oder in-proc-Hintergrundaufgabe), empfiehlt es sich auch, die Daten asynchron aus dem Enter Prise-Ereignishandler zu speichern.However, if you are doing work in the background (for example, audio playback, using an extended execution session or in-proc background task), it is also a good practice to save your data asynchronously from your EnteredBackground event handler. Dies liegt daran, dass es möglich ist, dass Ihre APP beendet wird, während Sie im Hintergrund eine niedrigere Priorität hat.This is because it is possible for your app to be terminated while it is at a lower priority in the background. Und da die App in diesem Fall nicht den Zustand „Angehalten“ durchlaufen hat, gehen Ihre Daten verloren.And because the app will not have gone through the suspended state in that case, your data will be lost.

Wenn Sie Ihre Daten in Ihrem enteredbackground -Ereignishandler speichern, bevor die Hintergrund Aktivität beginnt, wird eine gute Benutzererfahrung gewährleistet, wenn der Benutzer die APP wieder in den Vordergrund bringt.Saving your data in your EnteredBackground event handler, before background activity begins, ensures a good user experience when the user brings your app back to the foreground. Zum Speichern von Daten und Einstellungen können Sie die Anwendungsdaten-APIs verwenden.You can use the application data APIs to save data and settings. Weitere Informationen finden Sie unter Speichern und Abrufen von Einstellungen und anderen APP-Daten.For more info, see Store and retrieve settings and other app data.

Nachdem Sie Ihre Daten gespeichert haben, können Sie bei einer Überschreitung der maximalen Speicherauslastung die Daten aus dem Speicher freigeben, da Sie sie später erneut laden können.After you save your data, if you are over your memory usage limit, then you can release your data from memory since you can reload it later. Dadurch wird Speicher freigegeben, der von den für Hintergrundaktivitäten benötigten Ressourcen genutzt werden kann.That will free memory that can be used by the assets needed for background activity.

Beachten Sie Folgendes: Wenn in Ihrer App Hintergrundaktivitäten ausgeführt werden, kann sie vom Zustand „Ausführung im Hintergrund“ in den Zustand „Ausführung im Vordergrund“ wechseln, ohne jemals den Zustand „Angehalten“ zu erreichen.Be aware that if your app has background activity in progress that it can move from the running in the background state to the running in the foreground state without ever reaching the suspended state.

Asynchrone Vorgänge und VerzögerungenAsynchronous work and Deferrals

Wenn Sie innerhalb Ihres Handlers einen asynchronen Aufruf ausführen, wird die Steuerung sofort von diesem asynchronen Aufruf zurückgegeben.If you make an asynchronous call within your handler, control returns immediately from that asynchronous call. Das bedeutet, dass die Ausführung dann vom Ereignishandler zurückgegeben werden kann und die App in den nächsten Zustand übergeht, obwohl der asynchrone Aufruf noch nicht abgeschlossen wurde.That means that execution can then return from your event handler and your app will move to the next state even though the asynchronous call hasn't completed yet. Verwenden Sie die GetDeferral-Methode für das an den Ereignishandler übergebene EnteredBackgroundEventArgs-Objekt, um das Anhalten zu verzögern, bis Sie für das zurückgegebene Windows.Foundation.Deferral-Objekt die Complete-Methode aufgerufen haben.Use the GetDeferral method on the EnteredBackgroundEventArgs object that is passed to your event handler to delay suspension until after you call the Complete method on the returned Windows.Foundation.Deferral object.

Durch eine Verzögerung verlängert sich nicht die Zeit, die Ihr Code ausgeführt werden muss, bevor die App beendet wird.A deferral doesn't increase the amount you have to run your code before your app is terminated. Dabei wird nur die Beendigung verzögert, bis die Complete-Methode der Verzögerung aufgerufen wird oder die Frist abläuft, je nachdem, was zuerst eintritt.It only delays termination until either the deferral's Complete method is called, or the deadline passes-whichever comes first.

Falls Sie mehr Zeit zum Speichern des Zustands benötigen, sollten Sie nach Möglichkeiten suchen, den Zustand phasenweise zu speichern, bevor die App in den Hintergrundzustand eintritt, sodass weniger im EnteredBackground-Ereignishandler gespeichert werden muss.If you need more time to save your state, investigate ways to save your state in stages before your app enters the background state so that there is less to save in your EnteredBackground event handler. Alternativ können Sie auch ExtendedExecutionSession anfordern, um mehr Zeit zu erhalten.Or you may request an ExtendedExecutionSession to get more time. Da jedoch nicht sichergestellt ist, dass die Anforderung gewährt wird, sollten Sie Wege suchen, die zum Speichern des Zustands benötigte Zeit zu minimieren.There is no guarantee that the request will be granted, however, so it is best to find ways to minimize the amount of time you need to save your state.

Anhalten einer AppApp suspend

Wenn der Benutzer eine App minimiert, wird von Windows einige Sekunden abgewartet, ob der Benutzer zur App zurückkehrt.When the user minimizes an app Windows waits a few seconds to see whether the user will switch back to it. Wenn er nicht innerhalb dieses Zeitfensters zurückkehrt und keine erweiterte Ausführung, Hintergrundaufgabe oder aktivitätsgestützte Ausführung aktiv ist, wird die App von Windows angehalten.If they do not switch back within this time window, and no extended execution, background task, or activity sponsored execution is active, Windows suspends the app. Eine App wird auch angehalten, wenn der Sperrbildschirm angezeigt wird, es sei denn, eine erweiterte Ausführungssitzung usw. ist in der App aktiv.An app is also suspended when the lock screen appears as long as no extended execution session, etc. is active in that app.

Wenn eine App angehalten wird, ruft sie das Application.Suspending-Ereignis auf.When an app is suspended, it invokes the Application.Suspending event. Die UWP-Projektvorlagen in Visual Studio enthalten für dieses Ereignis den Handler mit dem Namen OnSuspending in „App.Xaml.cs“.Visual Studio’s UWP project templates provide a handler for this event called OnSuspending in App.xaml.cs. Vor Windows 10, Version 1607, hätten Sie den Code zum Speichern des Zustands hier eingefügt.Prior to Windows 10, version 1607, you would put the code to save your state here. Mittlerweile wird empfohlen, den Zustand beim Eintreten in den Hintergrundzustand zu speichern, wie oben beschrieben.Now the recommendation is to save your state when you enter the background state, as described above.

Sie sollten exklusive Ressourcen und Dateihandles freigeben, damit andere Apps darauf zugreifen können, während Ihre App angehalten wird.You should release exclusive resources and file handles so that other apps can access them while your app is suspended. Beispiele für exklusive Ressourcen sind Kameras, E/A-Geräte, externe Geräte und Netzwerkressourcen.Examples of exclusive resources include cameras, I/O devices, external devices, and network resources. Durch die explizite Freigabe exklusiver Ressourcen und Dateihandles kann sichergestellt werden, dass andere Apps darauf zugreifen können, während Ihre App angehalten ist.Explicitly releasing exclusive resources and file handles helps to ensure that other apps can access them while your app is suspended. Wenn die App fortgesetzt wird, sollte sie ihre exklusiven Ressourcen und Dateihandles erneut abrufen.When the app is resumed, it should reacquire its exclusive resources and file handles.

Achten Sie auf die AblauffristBe aware of the deadline

Um zu gewährleisten, dass Geräte schnell und flexibel reagieren, ist die Zeit zum Ausführen von Code im suspending-Ereignishandler begrenzt.In order to ensure a fast and responsive device, there is a limit for the amount of time you have to run your code in your suspending event handler. Sie wird als Frist bezeichnet, ist für jedes Gerät unterschiedlich und kann mithilfe einer Eigenschaft des SuspendingOperation-Objekts ermittelt werden.It is different for each device, and you can find out what it is using a property of the SuspendingOperation object called the deadline.

Hier verhält es sich genauso wie beim EnteredBackground-Ereignishandler: Wenn Sie innerhalb Ihres Handlers einen asynchronen Aufruf ausführen, wird die Steuerung sofort von diesem asynchronen Aufruf zurückgegeben.As with the EnteredBackground event handler, if you make an asynchronous call from your handler, control returns immediately from that asynchronous call. Das bedeutet, dass die Ausführung dann vom Ereignishandler zurückgegeben werden kann und die App in den Zustand „Angehalten“ übergeht, obwohl der asynchrone Aufruf noch nicht abgeschlossen wurde.That means that execution can then return from your event handler and your app will move to the suspend state even though the asynchronous call hasn't completed yet. Verwenden Sie die GetDeferral-Methode für das SuspendingOperation-Objekt (verfügbar über die Ereignisargumente), um den Wechsel in den Zustand „Angehalten“ zu verzögern, bis Sie die Complete-Methode für das zurückgegebene SuspendingDeferral-Objekt aufgerufen haben.Use the GetDeferral method on the SuspendingOperation object (available via the event args) to delay entering the suspended state until after you call the Complete method on the returned SuspendingDeferral object.

Falls Sie mehr Zeit benötigen, können Sie auch ExtendedExecutionSession anfordern.If you need more time, you may request an ExtendedExecutionSession. Da jedoch nicht sichergestellt ist, dass die Anforderung gewährt wird, sollten Sie Wege suchen, die im Suspended-Ereignishandler benötigte Zeit zu minimieren.There is no guarantee that the request will be granted, however, so it is best to find ways to minimize the amount of time you need in your Suspended event handler.

Beenden einer AppApp terminate

Das System versucht, die App und die zugehörigen Daten im Arbeitsspeicher beizubehalten, während sie angehalten ist.The system attempts to keep your app and its data in memory while it's suspended. Wenn das System aber nicht über die notwendigen Ressourcen verfügt, um die App im Arbeitsspeicher beizubehalten, wird die App beendet.However, if the system does not have the resources to keep your app in memory, it will terminate your app. Apps erhalten keine Benachrichtigung, dass sie beendet werden. App-Daten können also nur im OnSuspension-Ereignishandler oder asynchron im EnteredBackground-Handler gespeichert werden.Apps don't receive a notification that they are being terminated, so the only opportunity you have to save your app's data is in your OnSuspension event handler, or asynchronously from your EnteredBackground handler.

Wenn Ihre App feststellt, dass sie nach dem Beenden aktiviert wurde, sollte sie die gespeicherten Anwendungsdaten laden, damit die App denselben Zustand wie vor dem Beenden aufweist.When your app determines that it has been activated after being terminated, it should load the application data that it saved so that the app is in the same state it was in before it was terminated. Wenn der Benutzer wieder zu einer angehaltenen App wechselt, die beendet wurde, sollte die App ihre Anwendungsdaten mithilfe der OnLaunched-Methode wiederherstellen.When the user switches back to a suspended app that has been terminated, the app should restore its application data in its OnLaunched method. Das System benachrichtigt eine App nicht, wenn sie beendet wird. Bevor Ihre App angehalten wird, muss sie die Anwendungsdaten speichern und exklusive Ressourcen und Dateihandles freigeben und diese wiederherstellen, wenn sie nach der Beendigung erneut aktiviert wird.The system doesn't notify an app when it is terminated, so your app must save its application data and release exclusive resources and file handles before it is suspended, and restore them when the app is activated after termination.

Hinweis zum Debuggen mit Visual Studio: Visual Studio hindert Windows daran, eine APP zu sperren, die an den Debugger angefügt ist.A note about debugging using Visual Studio: Visual Studio prevents Windows from suspending an app that is attached to the debugger. Dies hat den Zweck, dem Benutzer das Anzeigen der Debugging-Benutzeroberfläche von Visual Studio zu ermöglichen, während die App ausgeführt wird.This is to allow the user to view the Visual Studio debug UI while the app is running. Beim Debuggen einer App können Sie mit Visual Studio ein Anhalteereignis an die App senden.When you're debugging an app, you can send it a suspend event using Visual Studio. Stellen Sie sicher, dass die Symbolleiste Debugspeicherort angezeigt wird, und klicken Sie dann auf das Symbol Anhalten.Make sure the Debug Location toolbar is being shown, then click the Suspend icon.

Fortsetzen einer AppApp resume

Eine angehaltene App wird fortgesetzt, wenn der Benutzer zu ihr wechselt oder es sich um die aktive App handelt und der Energiesparmodus für das Gerät beendet wird.A suspended app is resumed when the user switches to it or when it is the active app when the device comes out of a low power state.

Wenn eine App aus dem Zustand Angehalten fortgesetzt wird, wechselt sie in den Zustand Ausführung im Hintergrund, und das System stellt die App so wieder her, wie sie verlassen wurde. So entsteht für den Benutzer der Eindruck, die App wäre im Hintergrund weiter ausgeführt worden.When an app is resumed from the Suspended state, it enters the Running in background state and the system restores the app where it left off so that it appears to the user as if it has been running all along. Im Arbeitsspeicher gespeicherte App-Daten gehen nicht verloren.No app data stored in memory is lost. Daher müssen die meisten Apps den Zustand nicht wiederherstellen, wenn sie fortgesetzt werden. Sie sollten allerdings alle Datei- oder Gerätehandles erneut abrufen, die sie beim Anhalten freigegeben haben, und jeden Zustand wiederherstellen, der beim Anhalten der App explizit freigegeben wurde.Therefore, most apps don't need to restore state when they are resumed though they should reacquire any file or device handles that they released when they were suspended, and restore any state that was explicitly released when the app was suspended.

Eine App kann für Stunden oder Tage angehalten werden.You app may be suspended for hours or days. Wenn Inhalte oder Netzwerkverbindungen der App inzwischen veraltet sind, sollten diese beim Fortsetzen der App aktualisiert werden.If your app has content or network connections that may have gone stale, these should be refreshed when the app resumes. Wenn eine App einen Ereignishandler für das Application.Resuming-Ereignis registriert hat, wird dieser beim Fortsetzen der App aus dem Zustand Angehalten aufgerufen.If an app registered an event handler for the Application.Resuming event, it is called when the app is resumed from the Suspended state. Sie können die App-Inhalte und -Daten in diesem Ereignishandler aktualisieren.You can refresh your app content and data in this event handler.

Wenn eine angehaltene App für die Teilnahme an einem App-Vertrag oder einer Erweiterung aktiviert wird, empfängt sie zunächst das Resuming-Ereignis und dann das Activated-Ereignis.If a suspended app is activated to participate in an app contract or extension, it receives the Resuming event first, then the Activated event.

Wenn die angehaltene App beendet wurde, gibt es kein Resuming-Ereignis, und stattdessen wird OnLaunched() mit einem ApplicationExecutionState von Terminated aufgerufen.If the suspended app was terminated, there is no Resuming event and instead OnLaunched() is called with an ApplicationExecutionState of Terminated. Da Sie den Zustand beim Anhalten der App gespeichert haben, können Sie ihn während OnLaunched() wiederherstellen. So hat der Benutzer den Eindruck, dass die App denselben Zustand aufweist wie zu dem Zeitpunkt, als er sie verlassen hat.Because you saved your state when the app was suspended, you can restore that state during OnLaunched() so that your app appears to the user as it was when they switched away from it.

Angehaltene Apps empfangen keine Netzwerkereignisse, für deren Empfang sie registriert sind.While an app is suspended, it does not receive any network events that it registered to receive. Diese Netzwerkereignisse werden nicht in die Warteschlange gestellt, sondern einfach verpasst.These network events are not queued--they are simply missed. Apps sollten beim Fortsetzen daher den Netzwerkstatus prüfen.Therefore, your app should test the network status when it is resumed.

Hinweis    Da das resuming -Ereignis nicht vom UI-Thread ausgelöst wird, muss ein Verteiler verwendet werden, wenn der Code in Ihrem Resume-Handler mit ihrer Benutzeroberfläche kommuniziert.Note  Because the Resuming event is not raised from the UI thread, a dispatcher must be used if the code in your resume handler communicates with your UI. Ein Codebeispiel zur Vorgehensweise finden Sie unter Aktualisieren des UI-Threads von einem Hintergrundthread.See Update the UI thread from a background thread for a code example of how to do this.

Allgemeine Richtlinien finden Sie unter Richtlinien für das Anhalten und Fortsetzen von Apps.For general guidelines, see Guidelines for app suspend and resume.

Schließen einer AppApp close

Im Allgemeinen müssen Benutzer Apps nicht schließen, sondern können deren Verwaltung Windows überlassen.Generally, users don't need to close apps, they can let Windows manage them. Benutzer können Apps jedoch mit der Geste zum Schließen, durch Drücken von ALT+F4 oder mithilfe der Aufgabenumschaltfunktion in Windows Phone schließen.However, users can choose to close an app using the close gesture or by pressing Alt+F4 or by using the task switcher on Windows Phone.

Es gibt kein Ereignis zum Angeben, dass der Benutzer die App geschlossen hat.There is not an event to indicate that the user closed the app. Wenn eine App durch den Benutzer geschlossen wird, wird sie zuerst angehalten, damit Sie ihren Zustand speichern können.When an app is closed by the user, it is first suspended to give you an opportunity to save its state. In Windows 8.1 und höher wird eine App nach dem Schließen durch den Benutzer vom Bildschirm und aus der Umschaltliste entfernt, aber nicht explizit beendet.In Windows 8.1 and later, after an app has been closed by the user, the app is removed from the screen and switch list but not explicitly terminated.

Verhalten durch geschlossene Benutzer:    Wenn Ihre APP etwas anderes tun muss, wenn Sie vom Benutzer geschlossen wird, als wenn Sie von Windows geschlossen wird, können Sie den Aktivierungs Ereignishandler verwenden, um zu bestimmen, ob die APP vom Benutzer oder von Windows beendet wurde.Closed-by-user behavior:  If your app needs to do something different when it is closed by the user than when it is closed by Windows, you can use the activation event handler to determine whether the app was terminated by the user or by Windows. Beschreibungen zu den Status ClosedByUser und Terminated finden Sie in der Referenz für die ApplicationExecutionState-Enumeration.See the descriptions of ClosedByUser and Terminated states in the reference for the ApplicationExecutionState enumeration.

Wir raten dazu, dass Apps sich selbst nur dann programmgesteuert schließen sollten, wenn dies absolut erforderlich ist.We recommend that apps not close themselves programmatically unless absolutely necessary. Wenn eine App beispielsweise einen Arbeitsspeicherverlust erkennt, kann sie sich selbst schließen, um die Sicherheit der persönlichen Daten des Benutzers zu wahren.For example, if an app detects a memory leak, it can close itself to ensure the security of the user's personal data.

App-AbsturzApp crash

Der Systemabsturz ist dafür vorgesehen, dass die Benutzer ihre vorherigen Aktivitäten so schnell wie möglich wieder aufnehmen können.The system crash experience is designed to get users back to what they were doing as quickly as possible. Sie sollten kein Warnungsdialogfeld oder eine andere Benachrichtigung bereitstellen, da dies für den Benutzer eine Verzögerung verursacht.You shouldn't provide a warning dialog or other notification because that will delay the user.

Wenn die App abstürzt, nicht mehr reagiert oder eine Ausnahme generiert, wird über die Feedback- und Diagnoseeinstellungen des Benutzers ein Problembericht an Microsoft gesendet.If your app crashes, stops responding, or generates an exception, a problem report is sent to Microsoft per the user's feedback and diagnostics settings. Microsoft stellt Ihnen einige der Fehlerdaten im Problembericht bereit, mit denen Sie Ihre App verbessern können.Microsoft provides a subset of the error data in the problem report to you so that you can use it to improve your app. Sie können diese Daten auf der Seite „Qualität“ Ihrer App im Dashboard einsehen.You'll be able to see this data in your app's Quality page in your Dashboard.

Wenn der Benutzer eine App nach einem Absturz aktiviert, empfängt ihr Ereignishandler einen ApplicationExecutionState-Wert NotRunning, und es sollten einfach die ursprüngliche Benutzeroberfläche und die ursprünglichen Daten der App angezeigt werden.When the user activates an app after it crashes, its activation event handler receives an ApplicationExecutionState value of NotRunning, and should display its initial UI and data. Verwenden Sie nach einem Absturz nicht routinemäßig die APP-Daten, die Sie für die wieder Aufnahme mit angehalten hätten , da diese Daten beschädigt werden könnten. Weitere Informationen finden Sie unter Richtlinien für App Suspend und ResumeAfter a crash, don't routinely use the app data you would have used for Resuming with Suspended because that data could be corrupt; see Guidelines for app suspend and resume.

App-DeinstallationApp removal

Löscht ein Benutzer eine App, wird die App mit allen zugehörigen lokalen Daten entfernt.When a user deletes your app, the app is removed, along with all its local data. Das Entfernen von Apps hat keine Folgen für die Benutzerdaten, die an allgemeinen Speicherorten, z. B. in den Dokument- oder Bildbibliotheken, gespeichert wurden.Removing an app doesn't affect the user's data that was stored in common locations such as the Documents or Pictures libraries.

App-Lebenszyklus und Visual Studio-ProjektvorlagenApp lifecycle and the Visual Studio project templates

Der grundlegende Code, der für den Lebenszyklus der App relevant ist, wird in den Visual Studio-Projektvorlagen bereitgestellt.The basic code that is relevant to the app lifecycle is provided in the Visual Studio project templates. Die einfache App behandelt die Startaktivierung, stellt einen Speicherort zum Wiederherstellen Ihrer App-Daten bereit und zeigt die primäre Benutzeroberfläche an, bevor Sie eigenen Code hinzugefügt haben.The basic app handles launch activation, provides a place for you to restore your app data, and displays the primary UI even before you've added any of your own code. Weitere Informationen finden Sie unter c#-, VB-und C++-Projektvorlagen für-apps.For more info, see C#, VB, and C++ project templates for apps.

Wichtige APIs für den AnwendungslebenszyklusKey application lifecycle APIs