Partager via


Gérer la suspension d’une application

API importantes

Apprenez à enregistrer d’importantes données d’application lorsque le système suspend votre application. L’exemple enregistre un gestionnaire d’événements pour l’événement Suspending et enregistre une chaîne dans un fichier.

Inscrire le gestionnaire d’événements de suspension

Inscrivez-vous pour gérer l’événement Suspending , ce qui indique que votre application doit enregistrer ses données d’application avant que le système ne l’interrompe.

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 les données de l’application avant la suspension

Lorsque votre application gère l’événement Suspending , elle a la possibilité d’enregistrer ses données d’application importantes dans la fonction de gestionnaire. L’application doit utiliser l’API de stockage LocalSettings pour enregistrer des données d’application simples de manière synchrone.

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 ressources

Vous devez libérer des ressources exclusives et des handles de fichiers afin que d’autres applications puissent y accéder pendant la suspension de votre application. Parmi les ressources exclusives, citons les caméras, les appareils d’E/S, les appareils externes et les ressources réseau. La publication explicite de ressources exclusives et de handles de fichiers permet de s’assurer que d’autres applications peuvent y accéder pendant que votre application est suspendue. Une fois l’application reprise, elle doit réacquire ses ressources exclusives et ses handles de fichiers.

Notes

Le système suspend votre application chaque fois que l’utilisateur passe à une autre application ou à l’écran de bureau ou de démarrage. Le système reprend votre application chaque fois que l’utilisateur revient à celle-ci. Lorsque le système reprend votre application, le contenu de vos variables et structures de données est le même que celui que le système a suspendu l’application. Le système restaure l’application exactement là où elle s’est arrêtée, afin qu’elle apparaisse à l’utilisateur comme s’il était en cours d’exécution en arrière-plan.

Le système tente de conserver votre application et ses données en mémoire pendant sa suspension. Toutefois, si le système n’a pas les ressources nécessaires pour conserver votre application en mémoire, le système met fin à votre application. Lorsque l’utilisateur revient à une application suspendue qui a été arrêtée, le système envoie un événement Activé et doit restaurer ses données d’application dans sa méthode OnLaunched.

Le système n’avertit pas une application lorsqu’elle est terminée, de sorte que votre application doit enregistrer ses données d’application et libérer des ressources exclusives et des handles de fichiers lorsqu’elle est suspendue, puis les restaurer lorsque l’application est activée après l’arrêt.

Si vous effectuez un appel asynchrone dans votre gestionnaire, le contrôle retourne immédiatement à partir de cet appel asynchrone. Cela signifie que l’exécution peut ensuite retourner à partir de votre gestionnaire d’événements et que votre application passe à l’état suivant, même si l’appel asynchrone n’a pas encore été terminé. Utilisez la méthode GetDeferral sur l’objet EnteredBackgroundEventArgs transmis à votre gestionnaire d’événements pour retarder la suspension jusqu’à ce que vous appelons la méthode Complete sur l’objet Windows.Foundation.Deferral retourné.

Un report n’augmente pas la durée pendant laquelle vous devez exécuter votre code avant la fin de votre application. Il retarde uniquement l’arrêt jusqu’à ce que la méthode Complete du report soit appelée, soit que l’échéance passe en premier. Pour prolonger le temps dans l’état de suspension, utilisez ExtendedExecutionSession

Remarque

Pour améliorer la réactivité du système dans Windows 8.1, les applications reçoivent un accès de faible priorité aux ressources après leur suspension. Pour prendre en charge cette nouvelle priorité, le délai d’expiration de l’opération de suspension est étendu afin que l’application ait l’équivalent du délai d’expiration de 5 secondes pour la priorité normale sur Windows ou entre 1 et 10 secondes sur Windows Phone. Vous ne pouvez pas étendre ou modifier cette fenêtre de délai d’expiration.

Remarque sur le débogage à l’aide de Visual Studio : Visual Studio empêche Windows de suspendre une application attachée au débogueur. Cela permet à l’utilisateur d’afficher l’interface utilisateur de débogage Visual Studio pendant l’exécution de l’application. Lorsque vous déboguez une application, vous pouvez l’envoyer à un événement de suspension à l’aide de Visual Studio. Vérifiez que la barre d’outils Emplacement de débogage est affichée, puis cliquez sur l’icône Suspendre .