Cycle de vie d’une application de plateforme Windows universelle (UWP) Windows10Windows 10 universal Windows platform (UWP) app lifecycle

Cette rubrique décrit le cycle de vie d’une application de plateforme Windows universelle (UWP), depuis son activation jusqu’à sa fermeture.This topic describes the lifecycle of a Universal Windows Platform (UWP) app from the time it is launched until it is closed.

Un peu d’histoireA little history

Avant Windows8, les applications avaient un cycle de vie simple.Before Windows 8, apps had a simple lifecycle. Les applications Win32 et .NET sont en cours d’exécution ou pas.Win32 and .NET apps are either running or not running. Lorsqu’un utilisateur les réduit ou les ferme, elles continuent de s’exécuter.When a user minimizes them, or switches away from them, they continue to run. Cela ne posait aucun problème jusqu’à ce que les appareils mobiles et la gestion de l’alimentation prennent une importance croissante.This was fine until portable devices and power management became increasingly important.

Windows8 a mis en place un nouveau modèle d’application, avec les applications UWP.Windows 8 introduced a new application model with UWP apps. Globalement, un état suspendu a été ajouté.At a high level, a new suspended state was added. Une application UWP est suspendue, lorsque l’utilisateur la réduit ou bascule vers une autre application.A UWP app is suspended shortly after the user minimizes it or switches to another app. Autrement dit, les threads de l’application sont arrêtés et l’application reste en mémoire, sauf si le système d’exploitation a besoin de récupérer des ressources.This means that the app's threads are stopped and the app is left in memory unless the operating system needs to reclaim resources. Lorsque l’utilisateur revient à l’application, celle-ci peut rapidement reprendre un état d’exécution.When the user switches back to the app, it can be quickly restored to a running state.

Plusieurs modes permettent aux applications de continuer de s’exécuter en arrière-plan, comme les tâches en arrière-plan, l’exécution étendue et l’exécution commanditée par une activité (par exemple, la fonctionnalité BackgroundMediaEnabled qui permet à une application de continuer à lire du contenu multimédia en arrière-plan).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). De plus, les opérations de transfert en arrière-plan se poursuivent, même si votre application est suspendue ou arrêtée.Also, background transfer operations can continue even if your app is suspended or even terminated. Pour plus d’informations, consultez Comment télécharger un fichier.For more info, see How to download a file.

Par défaut, les applications qui ne sont pas au premier plan sont suspendues afin d’économiser l’énergie et de libérer des ressources pour l’application au premier plan.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.

Cet état suspendu vous rajoute des contraintes aux développeurs, car le système d’exploitation peut décider d’arrêter une application suspendue afin de libérer des ressources.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. L’application arrêtée reste visible dans la barre des tâches.The terminated app will still appear in the task bar. Lorsque l’utilisateur clique dessus, l’application doit restaurer l’état qui était le sien avant d’être arrêtée, car l’utilisateur ne sait pas que le système l’a fermée.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. Il pense qu’elle est en attente en arrière-plan pendant qu’il effectue d’autres opérations et qu’elle va reprendre le même état qu’auparavant.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. Dans cette rubrique, nous allons examiner comment procéder.In this topic we will look at how to accomplish that.

Windows10 version1607 utilise deuxétats supplémentaires d’application: Exécution au premier plan et Exécution en arrière-plan.Windows 10, version 1607, introduces two more app model states: Running in foreground and Running in background. Nous allons également examiner ces nouveaux états dans les sections suivantes.We will also look at these new states in the sections that follow.

État d’exécution de l’applicationApp execution state

L’illustration suivante représente les états possibles d’une application dans Windows10 version1607.This illustration represents the possible app model states starting in Windows 10, version 1607. Passons en revue le cycle de vie type d’une application UWP.Let's walk through the typical lifecycle of a UWP app.

Diagramme d’état indiquant les transitions entre les états d’exécution d’une application

Les applications adoptent l’état d’exécution en arrière-plan lorsque l’utilisateur les démarre ou les active.Apps enter the running in background state when they are launched or activated. Si le lancement d’une application au premier plan contraint l’application de passer au premier plan, cette dernière obtient l'événement LeavingBackground.If the app needs to move into the foreground due to a foreground app launch, the app then gets the LeavingBackground event.

Même si les termes «lancée» et «activée» semblent similaires, ils font référence aux différents modes selon lesquels le système d’exploitation peut démarrer votre application.Although "launched" and "activated" may seem like similar terms, they refer to different ways the operating system may start your app. Examinons tout d’abord le lancement d’une application.Let's first look at launching an app.

Lancement d’une applicationApp launch

Lorsqu’une application est lancée, la méthode OnLaunched est appelée.The OnLaunched method is called when an app is launched. Elle reçoit un paramètre LaunchActivatedEventArgs qui indique, entre autres, les arguments transmis à l’application, l’identificateur de la vignette qui a lancé l’application et l’état antérieur de l’application.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.

Obtenez l’état antérieur de votre application grâce à LaunchActivatedEventArgs.PreviousExecutionState qui renvoie un état ApplicationExecutionState.Get the previous state of your app from LaunchActivatedEventArgs.PreviousExecutionState which returns an ApplicationExecutionState. Ses valeurs et l’action appropriée à effectuer selon cet état sont les suivantes:Its values and the appropriate action to take due to that state are as follows:

ApplicationExecutionStateApplicationExecutionState ExplicationExplanation Action à effectuerAction to take
NotRunningNotRunning Une application peut être dans cet état, si elle n’a pas été lancée depuis le dernier redémarrage de l’ordinateur ou la dernière ouverture de session.An app could be in this state because it hasn't been launched since the last time the user rebooted or logged in. Elle peut également être dans cet état si une erreur d’exécution l’a bloquée ou si l’utilisateur l’a fermée auparavant.It can also be in this state if it was running but then crashed, or because the user closed it earlier. Initialisez l’application comme si elle s’exécutait pour la première fois dans la session utilisateur active.Initialize the app as if it is running for the first time in the current user session.
SuspendedSuspended L’utilisateur a réduit l’application ou activé une autre application et n’est pas revenu à la première après quelques secondes.The user either minimized or switched away from your app and didn't return to it within a few seconds. Lorsque l’application est suspendue, son état est conservé en mémoire.When the app was suspended, its state remained in memory. Il vous suffit de vous réapproprier les descripteurs de fichiers ou d’autres ressources qui ont été libérés lorsque l’application a été suspendue.You only need to reacquire any file handles or other resources you released when the app was suspended.
TerminatedTerminated L’application a été suspendue puis arrêtée, car le système a dû libérer de la mémoire.The app was previously suspended but was then shutdown at some point because the system needed to reclaim memory. Restaurez l’application dans l’état qui était le sien lorsque l’utilisateur a basculé vers une autre application.Restore the state that the app was in when the user switched away from it.
ClosedByUserClosedByUser L’utilisateur a fermé l’application en effectuant le mouvement de fermeture en mode tablette ou en appuyant sur Alt+F4.The user closed the app with the close gesture in tablet mode, or with Alt+F4. Lorsque l’utilisateur ferme l’application, celle-ci est suspendue puis arrêtée.When the user closes the app, it is first suspended and then terminated. Comme l’application a suivi les mêmes étapes qui aboutissent à l’état Terminated, gérez cette situation comme l’état 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.
RunningRunning L’application était déjà ouverte lorsque l’utilisateur a essayé de la relancer.The app was already open when the user tried to launch it again. Aucune.Nothing. Notez qu’aucune autre instance de votre application n’est lancée.Note that another instance of your app is not launched. L’instance en cours d’exécution est simplement activée.The already running instance is simply activated.

Remarque La session utilisateur active est basée sur l’ouverture de session Windows.Note Current user session is based on Windows logon. Tant que l’utilisateur actuel ne s’est pas déconnecté ou n’a pas arrêté ou redémarré Windows, la session utilisateur reste active entre des événements, tels que l’authentification de l’écran de verrouillage, le changement d’utilisateur, etc.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.

Gardez à l’esprit que si l’appareil dispose de ressources suffisantes, le système d’exploitation prélance fréquemment les applications qui ont autorisé ce comportement, afin d’optimiser la réactivité.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. Les applications prélancées démarrent en arrière-plan puis sont rapidement suspendues, permettant ainsi à l’utilisateur de les réactiver, une opération plus rapide qu’un démarrage.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.

Du fait du prélancement, la méthode OnLaunched() de l’application peut être initiée par le système plutôt que par l’utilisateur.Because of prelaunch, the app’s OnLaunched() method may be initiated by the system rather than by the user. Comme l’application est prélancée en arrière-plan, il est possible que vous deviez effectuer une autre action dans OnLaunched().Because the app is prelaunched in the background you may need to take different action in OnLaunched(). Par exemple, si votre application lit de la musique en cas de lancement, l’utilisateur ne peut pas savoir d’où le son provient, car l’application est prélancée en arrière-plan.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. Le prélancement de votre application en arrière-plan est suivi d’un appel à Application.Suspending.Once your app is prelaunched in the background, it is followed by a call to Application.Suspending. Ensuite, lorsque l’utilisateur démarre l’application, l’événement de reprise est appelé ainsi que la méthode OnLaunched().Then, when the user does launch the app, the resuming event is invoked as well as the OnLaunched() method. Pour plus d’informations sur la gestion du prélancement, consultez Gérer le prélancement d’une application.See Handle app prelaunch for additional information about how to handle the prelaunch scenario. Seules les applications qui autorisent cette opération sont prélancées.Only apps that opt-in are prelaunched.

Windows affiche un écran de démarrage pour l’application lancée.Windows displays a splash screen for the app when it is launched. Pour configurer cet écran de démarrage, consultez Ajout d’un écran de démarrage.To configure the splash screen, see Adding a splash screen.

Lorsque l’écran de démarrage s’affiche, votre application doit enregistrer les gestionnaires d’événements et configurer l’interface utilisateur personnalisée dont elle a besoin pour la page initiale.While the splash screen is displayed, your app should register event handlers and set up any custom UI it needs for the initial page. Vérifiez que ces tâches s’exécutent dans le constructeur de l’application et dans la méthode OnLaunched() en quelques secondes. Sinon, le système peut penser que votre application ne répond pas et l’arrêter.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. Si une application doit demander des données au réseau ou récupérer de grandes quantités de données sur le disque, ces activités doivent être effectuées hors du lancement.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. Une application peut utiliser son interface utilisateur de chargement personnalisée ou un écran de démarrage étendu, pendant l’exécution de ces longues opérations.An app can use its own custom loading UI or an extended splash screen while it waits for long running operations to finish. Pour plus d’informations, consultez Afficher un écran de démarrage plus longtemps et cet exemple d’écran de démarrage.See Display a splash screen for more time and the Splash screen sample for more info.

Une fois lancée, l’application adopte l’état Running et l’écran de démarrage disparaît (ses ressources et objets sont effacés).After the app completes launching, it enters the Running state and the splash screen disappears and all splash screen resources and objects are cleared.

Activation d’une applicationApp activation

Une application peut être lancée par l’utilisateur ou activée par le système.In contrast to being launched by the user, an app can be activated by the system. Une application peut être activée par un contrat, comme un contrat de partage.An app may be activated by a contract such as the share contract. Elle peut aussi être activée pour gérer un protocole d’URI personnalisé ou un fichier avec une extension que votre application est configurée pour gérer.Or it may be activated to handle a custom URI protocol or a file with an extension that your app is registered to handle. Pour obtenir la liste des modes d’activation possibles de votre application, consultez ActivationKind.For a list of ways your app can be activated, see ActivationKind.

La classe Windows.UI.Xaml.Application définit les méthodes que vous pouvez utiliser pour gérer les différents modes d’activation de votre application.The Windows.UI.Xaml.Application class defines methods you can override to handle the various ways your app may be activated. OnActivated gère tous les modes d’activation possibles.OnActivated can handle all possible activation types. Toutefois, il est plus courant d’employer certaines méthodes pour gérer les modes d’activation les plus courants et d’utiliser OnActivated pour les modes d’activation plus rares.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. Les méthodes autorisant des activations spécifiques sont les suivantes:These are the additional methods for specific activations:

OnCachedFileUpdaterActivatedOnCachedFileUpdaterActivated
OnFileActivatedOnFileActivated
OnFileOpenPickerActivated OnFileSavePickerActivatedOnFileOpenPickerActivated OnFileSavePickerActivated
OnSearchActivatedOnSearchActivated
OnShareTargetActivatedOnShareTargetActivated

Les données d’événement de ces méthodes incluent la propriété PreviousExecutionState que nous avons déjà vue plus haut et qui indique l’état dans lequel se trouvait l’application avant son activation.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. Interprétez cet état et ce que vous devez faire comme indiqué dans la section Lancement d’une application.Interpret the state and what you should do it the same way as described above in the App launch section.

Remarque Si vous ouvrez une session en utilisant le compte Administrateur de l’ordinateur, vous ne pouvez activer aucune applicationUWP.Note If you log on using the computer's Administrator account, you can't activate UWP apps.

Exécution en arrière-planRunning in the background

À partir de Windows10, version 1607, les applications peuvent exécuter des tâches en arrière-plan dans le même processus que l’application elle-même.Starting with Windows 10, version 1607, apps can run background tasks within the same process as the app itself. Pour en savoir plus, consultez Activité en arrière-plan avec le modèle à processus unique.Read more about it in Background activity with the Single Process Model. Nous n’étudierons pas le traitement en arrière-plan intégré au processus dans cet article, mais nous allons examiner son impact sur le cycle de vie, avec les deuxnouveaux événements qui se rapportent à votre application lorsqu’elle est en arrière-plan.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. Il s’agit de EnteredBackground et de LeavingBackground.They are: EnteredBackground and LeavingBackground.

Ces événements indiquent également si l’utilisateur peut voir l’interface utilisateur de votre application.These events also reflect whether the user can see your app's UI.

L’état Exécution en arrière-plan est l’état par défaut d’une application lancée, activée ou réactivée.Running in the background is the default state that an application is launched, activated, or resumed into. Dans cet état, l’interface utilisateur de votre application n’est pas visible.In this state your application UI is not visible yet.

Exécution au premier planRunning in the foreground

L’état Exécution au premier plan signifie que l’interface utilisateur de votre application est visible.Running in the foreground means that your app's UI is visible.

L’événement LeavingBackground est déclenché juste avant que l’interface utilisateur de votre application soit visible et avant d’adopter l’état Exécution au premier plan.The LeavingBackground event is fired just before your application UI is visible and before entering the running in foreground state. Il se déclenche également lorsque l’utilisateur revient dans votre application.It also fires when the user switches back to your app.

Auparavant, le meilleur emplacement pour charger les éléments de l’interface utilisateur était le gestionnaire d’événements Activated ou Resuming.Previously, the best location to load UI assets was in the Activated or Resuming event handlers. À présent, LeavingBackground est le meilleur endroit pour vérifier que votre interface utilisateur est prête.Now LeavingBackground is the best place to verify that your UI is ready.

Il est important de vérifier que les ressources visuelles sont prêtes à ce moment-là, car c’est la dernière occasion de faire le travail avant que votre application ne s’affiche à l’utilisateur.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. Le travail de l’interface utilisateur dans ce gestionnaire d’événements doit se terminer rapidement, car il conditionne le temps de lancement et de reprise constaté par l’utilisateur.All UI work in this event handler should complete quickly, as it impacts the launch and resume time that the user experiences. Le temps de vérifier que la première image de l’interface utilisateur est prête correspond au paramètre LeavingBackground.LeavingBackground is the time to ensure the first frame of UI is ready. Ensuite, les longs appels de réseau ou de stockage doivent être gérés de manière asynchrone afin que le gestionnaire d’événements puisse renvoyer des valeurs.Then, long-running storage or network calls should be handled asynchronously so that the event handler may return.

Lorsque l’utilisateur bascule hors de votre application, celle-ci reprend l’état Exécution en arrière-plan.When the user switches away from your application, your app reenters the running in background state.

Retour à l’état en arrière-planReentering the background state

L’événement EnteredBackground indique que votre application n’est plus visible au premier plan.The EnteredBackground event indicates that your app is no longer visible in the foreground. Sur le bureau, EnteredBackground se déclenche lorsque votre application est réduite; sur WindowsPhone, c’est lorsque vous basculez vers l’écran de démarrage ou une autre application.On the desktop EnteredBackground fires when your app is minimized; on phone, when switching to the home screen or another app.

Réduction de l’utilisation de la mémoire par votre applicationReduce your app's memory usage

Comme votre application n’est plus visible à l’utilisateur, le moment est idéal pour arrêter le travail de rendu de l’interface utilisateur et des animations.Since your app is no longer visible to the user, this is the best place to stop UI rendering work and animations. Vous pouvez utiliser LeavingBackground pour relancer ces opérations.You can use LeavingBackground to start that work again.

Si vous avez l’intention d’effectuer un travail en arrière-plan, c’est le moment de s’y préparer.If you are going to do work in the background, this is the place to prepare for it. Il est recommandé de vérifier MemoryManager.AppMemoryUsageLevel et, si nécessaire, de réduire la quantité de mémoire utilisée par votre application en arrière-plan, afin que le système ne risque pas de l’arrêter pour libérer des ressources.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.

Pour plus d’informations, consultez Libérer de la mémoire lorsque votre application passe à l’arrière-plan.See Reduce memory usage when your app moves to the background state for more details.

Enregistrement de votre étatSave your state

Le gestionnaire d’événements de suspension est le meilleur endroit pour enregistrer l’état de votre application.The suspending event handler is the best place to save your app state. Toutefois, si vous effectuez des opérations en arrière-plan (comme la lecture audio, une session d’exécution étendue ou une tâche en arrière-plan in-process), nous vous conseillons également d’enregistrer vos données de manière asynchrone à partir de votre gestionnaire d’événements EnteredBackground.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. Ceci, parce que votre application peut être arrêtée alors qu’elle est en arrière-plan, à un niveau de priorité inférieure.This is because it is possible for your app to be terminated while it is at a lower priority in the background. Et comme elle ne sera pas passée par l’état suspendu en l’occurrence, vous perdrez vos données.And because the app will not have gone through the suspended state in that case, your data will be lost.

L’enregistrement de vos données dans votre gestionnaire d’événements EnteredBackground, avant le début de l’activité en arrière-plan, garantit une bonne expérience lorsque l’utilisateur ramène votre application au premier plan.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. Vous pouvez utiliser les API de données d’application pour enregistrer les données et paramètres.You can use the application data APIs to save data and settings. Pour plus d’informations, consultez Stocker et récupérer des paramètres et autres données d’application.For more info, see Store and retrieve settings and other app data.

Si, après avoir enregistré vos données, vous dépassez votre limite d’utilisation de mémoire, vous pouvez libérer vos données de la mémoire car vous pourrez les recharger ultérieurement.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. Ce faisant, vous libérez de la mémoire qui peut être utilisée par les ressources nécessaires à l’activité en arrière-plan.That will free memory that can be used by the assets needed for background activity.

Sachez que, si elle application exécute une activité en arrière-plan, votre application peut passer de l’état Exécution en arrière-plan à l’état Exécution au premier plan, sans passer par l’état Suspendu.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.

Tâches asynchrones et reportsAsynchronous work and Deferrals

Si vous effectuez un appel asynchrone dans votre gestionnaire, le contrôle revient immédiatement de cet appel.If you make an asynchronous call within your handler, control returns immediately from that asynchronous call. Cela signifie que l’exécution peut ensuite revenir de votre gestionnaire d’événements et votre application prend l’état suivant, même si l’appel asynchrone n’est pas encore terminé.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. Utilisez la méthode GetDeferral sur l’objet EnteredBackgroundEventArgs qui est transmis à votre gestionnaire d’événements pour retarder la suspension jusqu'à ce que vous appeliez la méthode Complete sur l’objet Windows.Foundation.Deferral renvoyé.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.

Un report n’augmente pas le temps d’exécution nécessaire de votre code avant l’arrêt de votre application.A deferral doesn't increase the amount you have to run your code before your app is terminated. Cela ne retarde que l’arrêt jusqu'à ce que la méthode Complete soit appelée ou que la date d’échéance ne soit passée, la première de ces deuxéventualités prévalant.It only delays termination until either the deferral's Complete method is called, or the deadline passes-whichever comes first.

S’il vous faut davantage de temps pour enregistrer votre état, examinez les différentes solutions pour enregistrer votre état progressivement avant que l’application passe à l’état en arrière-plan afin que votre gestionnaire d’événements EnteredBackground ait moins de données à enregistrer.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. Vous pouvez également demander une session ExtendedExecutionSession pour obtenir plus de temps.Or you may request an ExtendedExecutionSession to get more time. Il n’y a aucune garantie que la demande soit accordée, mais il est préférable de trouver des solutions pour réduire le temps nécessaire à l’enregistrement de votre état.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.

Suspension d’une applicationApp suspend

Lorsque l’utilisateur réduit une application, Windows patiente quelques secondes pour voir si l’utilisateur va rebasculer vers celle-ci.When the user minimizes an app Windows waits a few seconds to see whether the user will switch back to it. S’il n’y revient pas dans le délai imparti, et qu’aucune exécution étendue, tâche en arrière-plan ou exécution commanditée par l’activité n’est active, Windows suspend l’application.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. Une application est également suspendue lorsque l’écran de verrouillage reste affiché tant qu’aucune session d’exécution étendue, etc. n’est active dans cette application.An app is also suspended when the lock screen appears as long as no extended execution session, etc. is active in that app.

Quand une application est suspendue, elle appelle l’événement Application.Suspending.When an app is suspended, it invokes the Application.Suspending event. Les modèles de projetUWP de VisualStudio fournissent un gestionnaire pour cet événement appelé OnSuspending dans App.xaml.cs.Visual Studio’s UWP project templates provide a handler for this event called OnSuspending in App.xaml.cs. Avant Windows10 version1607, vous auriez placé le code pour enregistrer votre état ici.Prior to Windows 10, version 1607, you would put the code to save your state here. Aujourd’hui, il est recommandé d’enregistrer votre état lorsque l’application prend l’état d’arrière-plan, comme décrit ci-dessus.Now the recommendation is to save your state when you enter the background state, as described above.

Vous devez également libérer les ressources exclusives et les descripteurs de fichiers pour permettre aux autres applications d’y accéder lorsque votre application est suspendue.You should release exclusive resources and file handles so that other apps can access them while your app is suspended. Appareils photo, périphériques d’E/S, appareils externes et ressources réseau sont autant d’exemples de ressources exclusives.Examples of exclusive resources include cameras, I/O devices, external devices, and network resources. En libérant explicitement les ressources exclusives et les descripteurs de fichiers, vous permettez aux autres applications d’y accéder lorsque votre application est suspendue.Explicitly releasing exclusive resources and file handles helps to ensure that other apps can access them while your app is suspended. Lorsqu’elle est réactivée, l’application doit se réapproprier ses ressources exclusives et descripteurs de fichiers.When the app is resumed, it should reacquire its exclusive resources and file handles.

Gardez à l’esprit la date d’échéanceBe aware of the deadline

Pour que l’appareil soit rapide et réactif, vous devez exécuter votre code dans votre gestionnaire d’événements de suspension pendant une durée limitée.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. Cette durée varie selon l’appareil et vous constatez que ce dernier utilise une propriété de l’objet SuspendingOperation appelé date d’échéance.It is different for each device, and you can find out what it is using a property of the SuspendingOperation object called the deadline.

Comme pour le gestionnaire d’événements EnteredBackground, si vous effectuez un appel asynchrone depuis votre gestionnaire, le contrôle renvoie immédiatement un retour de cet appel.As with the EnteredBackground event handler, if you make an asynchronous call from your handler, control returns immediately from that asynchronous call. Cela signifie que l’exécution peut ensuite renvoyer un retour de votre gestionnaire d’événements et votre application prend l’état Suspended, même si l’appel asynchrone n’est pas encore terminé.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. Utilisez la méthode GetDeferral sur l’objet SuspendingOperation (disponible via les arguments de l’événement) pour retarder la suspension jusqu’à ce que vous appeliez la méthode Complete sur l’objet SuspendingDeferral renvoyé.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.

Pour obtenir plus de temps, vous pouvez demander une session ExtendedExecutionSession.If you need more time, you may request an ExtendedExecutionSession. Il n’y a aucune garantie que la demande soit accordée, mais il est préférable de trouver des solutions pour réduire le temps nécessaire dans votre gestionnaire d’événements Suspended.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.

Arrêt d’une applicationApp terminate

Le système tente de conserver votre application et ses données en mémoire pendant sa suspension.The system attempts to keep your app and its data in memory while it's suspended. Toutefois, si le système ne dispose pas des ressources pour conserver votre application en mémoire, il arrête votre application.However, if the system does not have the resources to keep your app in memory, it will terminate your app. Les applications ne sont pas notifiées de leur arrêt. De ce fait, vous ne pouvez enregistrer les données de votre application que dans votre gestionnaire d’événements OnSuspension ou de manière asynchrone à partir de votre gestionnaire EnteredBackground.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.

Lorsque votre application détermine qu’elle a été activée après avoir été arrêtée, elle doit charger les données qu’elle avait enregistrées, afin qu’elle reprenne l’état qui était le sien avant son arrêt.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. Quand l’utilisateur bascule à nouveau vers une application suspendue qui a été arrêtée, l’application doit restaurer ses données dans sa méthode OnLaunched.When the user switches back to a suspended app that has been terminated, the app should restore its application data in its OnLaunched method. Le système ne vous notifie pas de l’arrêt d’une application. Celle-ci doit donc enregistrer ses données d’application et libérer les ressources exclusives et descripteurs de fichiers avant d’être suspendue, pour ensuite les restaurer en cas de reprise après un arrêt.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.

Remarque concernant le débogage à l’aide de VisualStudio: VisualStudio empêche Windows de suspendre une application qui est jointe au débogueur.A note about debugging using Visual Studio: Visual Studio prevents Windows from suspending an app that is attached to the debugger. afin que l’utilisateur puisse voir l’interface de débogage de Visual Studio pendant l’exécution de l’application.This is to allow the user to view the Visual Studio debug UI while the app is running. Lorsque vous déboguez une application, vous pouvez lui envoyer un événement de suspension à l’aide de Visual Studio.When you're debugging an app, you can send it a suspend event using Visual Studio. Vérifiez que la barre d’outils Emplacement de débogage est visible et cliquez sur l’icône Suspendre.Make sure the Debug Location toolbar is being shown, then click the Suspend icon.

Reprise d’une applicationApp resume

Une application suspendue reprend son exécution quand l’utilisateur bascule vers celle-ci ou quand elle est active au moment où l’appareil quitte un état de faible consommation d’énergie.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.

Lorsqu’une application quitte l’état Suspended, elle prend l’état Exécution en arrière-plan et le système restaure l’application dans le dernier état qui était le sien, afin qu’elle s’affiche à l’utilisateur comme si elle avait continué de s’exécuter en continu.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. Aucune donnée d’application stockée en mémoire n’est perdue.No app data stored in memory is lost. Par conséquent, la plupart des applications n’ont pas besoin de restaurer leur état en cas de reprise. Mais elles doivent se réapproprier les descripteurs de fichier ou d’appareil libérés lors de leur suspension, et restaurer un état qui a été libéré explicitement lors de leur suspension.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.

Votre application peut être suspendue pendant plusieurs heures ou jours.You app may be suspended for hours or days. Si votre application présente du contenu ou des connexions réseau caduques, il convient de les actualiser lors de la reprise.If your app has content or network connections that may have gone stale, these should be refreshed when the app resumes. Si une application a inscrit le gestionnaire de l’événement Application.Resuming, ce gestionnaire est appelé lorsque l’application à l’état Suspended est réactivée.If an app registered an event handler for the Application.Resuming event, it is called when the app is resumed from the Suspended state. Vous pouvez actualiser le contenu et les données de votre application à l’aide de ce gestionnaire d’événements.You can refresh your app content and data in this event handler.

Si une application suspendue est activée pour participer à un contrat ou une extension d’application, elle reçoit d’abord l’événement Resuming puis l’événement Activated.If a suspended app is activated to participate in an app contract or extension, it receives the Resuming event first, then the Activated event.

Si l’application suspendue a été arrêtée, il n’y a aucun événement Resuming et la méthode OnLaunched() est appelée avec un paramètre ApplicationExecutionState ayant pour valeur Terminated.If the suspended app was terminated, there is no Resuming event and instead OnLaunched() is called with an ApplicationExecutionState of Terminated. Comme vous avez enregistré votre état lorsque l’application a été suspendue, vous pouvez le restaurer pendant la méthode OnLaunched() afin que votre application s’affiche à l’utilisateur comme elle était lorsque ce dernier a basculé vers une autre application.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.

Lorsqu’elle est suspendue, une application ne reçoit aucun événement réseau qu’elle est configurée pour recevoir.While an app is suspended, it does not receive any network events that it registered to receive. Ces événements réseau ne sont pas mis en file d’attente, mais simplement manqués.These network events are not queued--they are simply missed. Par conséquent, votre application doit tester l’état du réseau lors de sa reprise.Therefore, your app should test the network status when it is resumed.

Remarque Dans la mesure où l’événement Resuming n’est pas déclenché à partir du thread d’interface utilisateur, il convient d’utiliser un répartiteur si le code de votre gestionnaire de reprise communique avec votre interface utilisateur.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. Pour un exemple de code illustrant la marche à suivre, consultez Mettre à jour le thread d’interface utilisateur à partir d’un thread d’arrière-plan.See Update the UI thread from a background thread for a code example of how to do this.

Pour des consignes générales, consultez Lancement, reprise et tâches en arrière-plan.For general guidelines, see Guidelines for app suspend and resume.

Fermeture d’une applicationApp close

En général, les utilisateurs n’ont pas besoin de fermer les applications et peuvent laisser Windows les gérer.Generally, users don't need to close apps, they can let Windows manage them. Toutefois, ils peuvent décider de fermer une application en effectuant un mouvement de fermeture, en appuyant sur Alt+F4 ou en utilisant le sélecteur de tâche sur Windows Phone.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.

Aucun événement n’indique que l’utilisateur a fermé l’application.There is not an event to indicate that the user closed the app. Lorsqu’elle est fermée par l’utilisateur, une application est d’abord suspendue pour lui donner l’occasion d’enregistrer son état.When an app is closed by the user, it is first suspended to give you an opportunity to save its state. Sous Windows8.1 et versions ultérieures, une fois fermée par l’utilisateur, une application est supprimée de l’écran et de la liste de répartition sans être arrêtée de manière explicite.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.

Fermée par l’utilisateur: si votre application doit se comporter différemment selon qu’elle est fermée par l’utilisateur ou par Windows, vous pouvez utiliser le gestionnaire d’événements d’activation pour déterminer si l’application a été arrêtée par l’utilisateur ou par Windows.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. Voir les descriptions des états ClosedByUser et Terminated dans la documentation relative à l’énumération ApplicationExecutionState.See the descriptions of ClosedByUser and Terminated states in the reference for the ApplicationExecutionState enumeration.

Nous recommandons que les applications ne puissent se fermer par programme qu’en cas d’absolue nécessité.We recommend that apps not close themselves programmatically unless absolutely necessary. Par exemple, si une application détecte une fuite de mémoire, elle peut se fermer pour sécuriser les données personnelles de l’utilisateur.For example, if an app detects a memory leak, it can close itself to ensure the security of the user's personal data.

Blocage d’une applicationApp crash

La procédure en cas de blocage du système est conçue pour permettre aux utilisateurs de revenir à ce qu’ils étaient en train de faire, aussi rapidement que possible.The system crash experience is designed to get users back to what they were doing as quickly as possible. Vous ne devez pas fournir de boîte de dialogue d’avertissement ou d’autres notifications, car celles-ci retarderont l’utilisateur.You shouldn't provide a warning dialog or other notification because that will delay the user.

Si votre application se bloque, cesse de répondre ou génère une exception, un rapport de problèmes est envoyé à Microsoft via les paramètres de commentaires et diagnostics de l’utilisateur.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 vous fournit un sous-ensemble des données d’erreur dans le rapport de problèmes pour que vous puissiez les utiliser afin d’améliorer votre application.Microsoft provides a subset of the error data in the problem report to you so that you can use it to improve your app. Vous pouvez consulter ces données dans la page Qualité du tableau de bord.You'll be able to see this data in your app's Quality page in your Dashboard.

Lorsque l’utilisateur active une application après une panne, son gestionnaire d’événements d’activation reçoit une valeur ApplicationExecutionState de NotRunning et doit afficher son interface utilisateur et ses données d’origine.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. Après une panne, n’utilisez pas de manière automatique les données d’application utilisées pour Resuming avec Suspended, car ces données peuvent être endommagées. Consultez Recommandations en matière d’interruption et de reprise d’une application.After 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.

Suppression d’une applicationApp removal

Lorsqu’un utilisateur supprime votre application, elle est supprimée avec toutes ses données locales.When a user deletes your app, the app is removed, along with all its local data. La suppression d’une application n’affecte pas les données de l’utilisateur stockées dans des emplacements communs, telles les bibliothèques de documents ou d’images.Removing an app doesn't affect the user's data that was stored in common locations such as the Documents or Pictures libraries.

Cycle de vie de l’application et modèles de projet Visual StudioApp lifecycle and the Visual Studio project templates

Le code de base approprié au cycle de vie de l’application est fourni dans les modèles de projet VisualStudio.The basic code that is relevant to the app lifecycle is provided in the Visual Studio project templates. L’application de base gère l’activation au lancement, fournit un emplacement pour restaurer vos données d’application et affiche l’interface utilisateur principale avant même que vous ayez ajouté votre propre code.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. Pour plus d’informations, consultez Modèles de projet en C#, VB et C++ pour les applications du WindowsStore.For more info, see C#, VB, and C++ project templates for apps.

Principales API du cycle de vie d’une applicationKey application lifecycle APIs