Gérer la suspension d’une applicationHandle app suspend

API importantesImportant APIs

Apprenez à enregistrer d’importantes données d’application lorsque le système suspend votre application.Learn how to save important application data when the system suspends your app. L’exemple inscrit un gestionnaire pour l’événement Suspending et enregistre une chaîne dans un fichier.The example registers an event handler for the Suspending event and saves a string to a file.

Enregistrer le gestionnaire d’événements de suspensionRegister the suspending event handler

Enregistrez-vous pour gérer l’événement Suspending, qui indique que votre application doit enregistrer ses données d’application avant que le système la suspende.Register to handle the Suspending event, which indicates that your app should save its application data before the system suspends it.

using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;

partial class MainPage
{
   public MainPage()
   {
      InitializeComponent();
      Application.Current.Suspending += new SuspendingEventHandler(App_Suspending);
   }
}
Public NotInheritable Class MainPage

   Public Sub New()
      InitializeComponent()
      AddHandler Application.Current.Suspending, AddressOf App_Suspending
   End Sub

End Class
MainPage::MainPage()
{
    InitializeComponent();
    Windows::UI::Xaml::Application::Current().Suspending({ this, &MainPage::App_Suspending });
}
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
using namespace AppName;

MainPage::MainPage()
{
   InitializeComponent();
   Application::Current->Suspending +=
       ref new SuspendingEventHandler(this, &MainPage::App_Suspending);
}

Enregistrer des données d’application avant sa suspensionSave application data before suspension

Lorsque votre application traite l’événement Suspending, elle a la possibilité d’enregistrer ses données d’application importantes dans la fonction du gestionnaire.When your app handles the Suspending event, it has the opportunity to save its important application data in the handler function. L’application doit utiliser l’API de stockage LocalSettings pour enregistrer les données d’application simples de manière synchrone.The app should use the LocalSettings storage API to save simple application data synchronously.

partial class MainPage
{
    async void App_Suspending(
        Object sender,
        Windows.ApplicationModel.SuspendingEventArgs e)
    {
        // TODO: This is the time to save app data in case the process is terminated.
    }
}
Public NonInheritable Class MainPage

    Private Sub App_Suspending(
        sender As Object,
        e As Windows.ApplicationModel.SuspendingEventArgs) Handles OnSuspendEvent.Suspending

        ' TODO: This is the time to save app data in case the process is terminated.
    End Sub

End Class
void MainPage::App_Suspending(
    Windows::Foundation::IInspectable const& /* sender */,
    Windows::ApplicationModel::SuspendingEventArgs const& /* e */)
{
    // TODO: This is the time to save app data in case the process is terminated.
}
void MainPage::App_Suspending(Object^ sender, SuspendingEventArgs^ e)
{
    // TODO: This is the time to save app data in case the process is terminated.
}

Libérer des ressourcesRelease resources

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.

RemarquesRemarks

Le système suspend votre application chaque fois que l’utilisateur passe à une autre application, au Bureau ou à l’écran d’accueil.The system suspends your app whenever the user switches to another app or to the desktop or Start screen. Le système en reprend l’exécution lorsque l’utilisateur revient à votre application.The system resumes your app whenever the user switches back to it. Dès lors, le contenu de vos variables et structures de données restent identiques à ce qu’elles étaient avant que le système ne suspende l’application.When the system resumes your app, the content of your variables and data structures is the same as it was before the system suspended the app. Le système rétablit l’application exactement dans l’état où il l’a laissée, de sorte qu’elle semble s’être exécutée en arrière-plan.The system restores the app exactly where it left off, so that it appears to the user as if it's been running in the background.

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 met fin à votre application.However, if the system does not have the resources to keep your app in memory, the system will terminate your app. Lorsque l’utilisateur rebascule vers une application suspendue qui a été arrêtée, le système envoie un événement Activated et doit restaurer ses données d’application dans sa méthode OnLaunched.When the user switches back to a suspended app that has been terminated, the system sends an Activated event and 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 au moment où elle est mise en suspens pour ensuite les restaurer lorsque l’application est activée après avoir été arrêtée.The system doesn't notify an app when it's terminated, so your app must save its application data and release exclusive resources and file handles when it's suspended, and restore them when the app is activated after termination.

Si vous effectuez un appel asynchrone depuis votre gestionnaire, le contrôle renvoie immédiatement un retour 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. Pour étendre la durée en l’état d’interruption en cours usage ExtendedExecutionSessionTo extend time in the Suspending state use ExtendedExecutionSession

Note

Pour améliorer la réactivité du système dans Windows8.1, les applications disposent d’un accès de faible priorité aux ressources de cas de suspension.To improve system responsiveness in Windows8.1, apps are given low priority access to resources after they are suspended. Pour prendre en charge cette nouvelle priorité, le délai de l’opération de suspension est prolongé afin que l’application dispose d’un délai de 5secondes en priorité normale sur Windows ou de 1 à 10secondes sur Windows Phone.To support this new priority, the suspend operation timeout is extended so that the app has the equivalent of the 5-second timeout for normal priority on Windows or between 1 and 10 seconds on Windows Phone. Vous ne pouvez pas étendre ni modifier ce délai.You cannot extend or alter this timeout window.

Remarque concernant le débogage à l’aide de Visual Studio : Visual Studio empêche Windows de suspendre une application qui est jointe au débogueurA 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. Assurez-vous 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.