Comment suspendre une application (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Apprenez à enregistrer des données d’application importantes lorsque le système suspend votre application Windows Runtime. Lorsque votre application est suspendue par le système, elle peut être arrêtée sans avertissement. Par conséquent, il est important d’enregistrer l’état actuel de l’utilisateur dans l’application pour que, lorsque celle-ci est redémarrée, vous puissiez restaurer cet état. L’utilisateur ne doit jamais savoir que l’application a été suspendue et arrêtée en arrière-plan.

La procédure suivante vous montre comment enregistrer l’événement checkpoint et l’utiliser pour enregistrer un état de base.

Instructions

Étape 1: Enregistrez l’événement de point de contrôle

Enregistrez l’événement checkpoint (point de contrôle) pour l’inclure dans l’étendue globale. Cet événement indique que le système est en train de suspendre votre application. Une fois que votre application a été suspendue, elle peut être arrêtée par le système pour libérer des ressources système. Pour cette raison, il est important d’enregistrer les données de votre application au cours de l’événement point de contrôle.


var app = WinJS.Application;

app.addEventListener("checkpoint", checkpointHandler);

Étape 2: Enregistrer les données de l’application avant sa suspension

Lorsque votre application traite l’événement checkpoint, elle a la possibilité d’enregistrer ses données d’application importantes dans la fonction de gestionnaire pour l’événement checkpoint. L’application peut utiliser l’objet sessionState pour enregistrer des données d’application simples de manière synchrone. L’objet sessionState conserve les données de sorte que l’application puisse y accéder pendant l’activation après l’arrêt.

function checkpointHandler(eventArgs) 
{
    var stateObject = new Object();

    // TODO: Populate the state object with app data

    // Save the state object to the session object
    app.sessionState.stateObject = stateObject;
}

Étape 3: Libérer les ressources exclusives et les descripteurs de fichiers

Lorsque votre application traite l’événement checkpoint, elle a également la possibilité de libérer les ressources exclusives et les descripteurs de fichiers. Caméras, périphériques d’E/S, périphériques externes et ressources réseau sont autant d’exemples de ressources exclusives. En libérant explicitement les ressources exclusives et les descripteurs de fichiers, vous permettez aux autres applications d’y accéder pendant que votre application ne les utilise pas. Lorsque l’application est activée après un arrêt, elle doit ouvrir ses ressources exclusives et descripteurs de fichiers.

Remarques

Le système suspend votre application chaque fois que l’utilisateur passe à une autre application ou au Bureau. Le système en reprend l’exécution lorsque l’utilisateur revient à votre application. 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. 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.

Le système tente de conserver votre application et ses données en mémoire pendant sa suspension. Cependant, le système d’exploitation peut arrêter votre application pour différentes raisons, une fois qu’elle a été suspendue. Voici quelques exemples de cas quand cela peut se produire : l’utilisateur ferme manuellement votre application, l’utilisateur se déconnecte ou le système manque de ressources. Lorsque l’utilisateur revient à une application suspendue qui a été arrêtée, l’application reçoit un événement activated et doit vérifier si ses objets sessionState sont définis. Si les objets sont définis, l’application doit charger ces données.

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 ses ressources exclusives et descripteurs de fichiers au moment où elle est suspendue pour ensuite les restaurer lorsqu’elle est réactivée après avoir été suspendue ou activée après avoir été arrêtée.

Remarque  Si vous devez effectuer des tâches asynchrones lorsque votre application est en cours de suspension, vous devez différer l’exécution de la suspension tant que vos tâches ne sont pas terminées. Vous pouvez utiliser la méthode setPromise sur la propriété de détail de l’argument de l’événement checkpoint pour retarder la suspension jusqu’à ce que la promesse soit réalisée.

 

Remarque  Pour améliorer la réactivité du système dans Windows 8.1 et Windows Phone, les applications disposent d’un accès à faible priorité aux ressources en cas de suspension. 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 accès de 5 secondes en priorité normale sur Windows et de 1 à 10 secondes sur Windows Phone. Vous ne pouvez pas étendre ni modifier ce délai.

 

Remarque concernant le débogage à l’aide de Microsoft Visual Studio: Visual Studio empêche Windows de suspendre une application qui est jointe au débogueur afin que l’utilisateur puisse voir l’interface de débogage de Visual Studio pendant l’exécution de l’application. Lorsque vous déboguez une application, vous pouvez lui envoyer un événement de suspension à l’aide de Visual Studio. Assurez-vous que la barre d’outils Emplacement de débogage est visible et cliquez sur l’icône Suspendre.

Terminer l’exemple

Voir Exemple d’activation et de suspension d’une application à l’aide de WinJS et Exemple d’activation, de reprise et de suspension d’une application à l’aide de WRL pour des exemples de code complet vous montrant comment traiter les événements de cycle de vie d’une application.

Rubriques associées

Tâches

Comment activer une application

Comment relancer une application

Conceptuel

Cycle de vie des applications

Recommandations

Recommandations pour la suspension et la reprise d’une application

Référence

WinJS.Application.checkpoint

WinJS.Application.sessionState