Comment gérer l’activation d’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 à définir une expérience d’activation pour votre application Windows Runtime.

Chaque fois que votre application est lancée, l’événement activated est déclenché. Cet événement peut également être déclenché lorsque votre application est en cours d’exécution, si le système a besoin de transmettre les paramètres de l’application associés à un nouveau contrat d’activation. Vous pouvez utiliser l’événement activated pour restaurer l’état précédent de votre application et récupérer les paramètres d’activation associés au contrat pour lequel votre application est en cours d’activation. Pour obtenir la liste complète des contrats d’activation et plus d’informations sur leurs paramètres, voir l’énumération ActivationKind.

La procédure suivante vous montre comment enregistrer l’événement activated (activé), l’utiliser pour restaurer un état de base d’une application et l’utiliser pour traiter une activation par défaut à partir d’une vignette.

Instructions

Étape 1: Enregistrez l’événement activé

Enregistrez l’événement activated pour l’inclure dans l’étendue globale. Cet exemple définit activatedHandler comme gestionnaire d’activation. Le gestionnaire d’activation vous permet de récupérer l’état ApplicationExecution précédent de votre application ainsi que les arguments d’activation. Pour obtenir la liste des types d’activation, voir l’énumération ActivationKind.


var app = WinJS.Application;

app.addEventListener("activated", activatedHandler, false);
app.start();

Étape 2: Restaurez les données d’application en cas de suspension puis d’arrêt de votre application

Le système d’exploitation peut arrêter votre application pour différentes raisons, une fois qu’elle a été suspendue. Voici quelques exemples montrant quand cela peut se produire : l’utilisateur ferme manuellement votre application, l’utilisateur se déconnecte ou le système est sur le point de manquer de ressources. Si l’utilisateur lance votre application après que le système d’exploitation l’a arrêtée, il reçoit un événement activated. Utilisez l’objet sessionState pour déterminer si vous avez besoin de restaurer les données de votre application ou de démarrer avec ses paramètres par défaut. Si vos variables sessionState sont définies, utilisez-les pour restaurer les données de votre application et pour actualiser son contenu affiché. Si elles ne sont pas définies, chargez les paramètres par défaut.

Vous pouvez également utiliser la propriété PreviousExecutionState sur les arguments des événements pour déterminer si l’état précédent de votre application doit être restauré. Si la valeur ApplicationExecutionState de cette propriété est Terminated, l’état précédent de votre application doit être restauré. S’il s’agit d’une autre valeur vous devez charger les paramètres par défaut de l’application.

Remarque   Si votre application est activée alors qu’elle est déjà en cours d’exécution, vous devez veiller à ne pas restaurer les données enregistrées.

 

function activatedHandler(eventArgs) {
   if (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.launch) 
   {
      // Check whether my session state variables are valid.
      // If so, retrieve the application data saved in the checkpoint handler
      if (app.sessionState) 
      {
         // TODO: Populate the UI with the previously saved application data            
      } 
      else
      {
         // TODO: Populate the UI with defaults             
      }

   }
}

Étape 3: Si vous la lancez sur un nouvel ordinateur, recherchez des vignettes secondaires existantes.

// Get secondary tile ids for the application and list them out

Windows.UI.StartScreen.SecondaryTile.findAllAsync().then(function (tiles) {
   if (tiles) {
      tiles.forEach(function (tile) {
         // Inspect the tile and do required work 
      });
   } 
   else {
      // there are no tiles 
      }
   });
}

Étape 4: Récupérez les arguments d’activation

Lorsque le système active votre application, il peut y avoir un contexte supplémentaire pour l’activation.

Chaque type de contrat d’activation possède son propre ensemble de paramètres qui vous fournit plus d’informations sur la raison pour laquelle votre application est en cours d’activation. Les classes eventArgs pour chaque contrat sont définies dans l’espace de noms Windows.UI.WebUI. Cet extrait de code montre comment récupérer les arguments à partir d’un lancement de vignette par défaut.

function activatedHandler(eventArgs) {
    if (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.launch) 
    {
        if (eventArgs.detail.arguments !== '')
        {
            // TODO: Parse the arguments string
        }
    // Initialize the WinJS controls
    eventArgs.setPromise(WinJS.UI.processAll();)

    }
}

Étape 5: Configurez l’interface utilisateur de l’application

Lorsque vous gérez l’activation pour un lancement initial, le système affiche l’écran de démarrage tant que votre application n’a pas terminé son activation. Dans certains cas, votre application peut être tenue d’effectuer des tâches asynchrones, telles que la lecture de paramètres dans un fichier, pour initialiser correctement son interface utilisateur. Ces tâches doivent être effectuées au cours de l’activation de sorte que l’écran de démarrage ne disparaisse pas tant que votre interface utilisateur n’est pas complète. Vous pouvez différer la fin de l’activation en utilisant la méthode setPromise() sur les classes eventArgs d’activation. Dans le précédent extrait de code, setPromise() permet de différer la fin de l’activation jusqu’à ce que l’appel asynchrone à processAll() se termine.

Si vous utilisez les modèles Microsoft Visual Studio, la méthode setPromise() est appelée pour vous. Si vous avez des tâches asynchrones à terminer avant que l’écran de démarrage ne disparaisse, terminez ces tâches au cours de l’événement « traité » de votre nouveau fragment de page. Veillez à retourner une promesse à partir de cette activité asynchrone pour retarder la fin de l’événement « traité » jusqu’à ce que l’activité se termine. L’événement traité est appelé chaque fois que votre application navigue jusqu’à un fragment de page particulier, si bien que vous devez vous assurer que tout code spécifique à l’activation est exécuté uniquement sur une navigation déclenchée par une activation. Lors d’une navigation normale, ce code doit être ignoré.

Remarque  L’écran de démarrage a pour simple but de couvrir les très brèves activités requises pour configurer votre interface utilisateur initiale. Les activités exigeant une exécution longue, telles que les appels au réseau ou le chargement d’un fichier volumineux à partir du disque, ne doivent pas être réalisées au cours de l’activation. Dans ces cas, votre application doit configurer une interface utilisateur de progression au cours de l’activation ou un écran de démarrage étendu, puis revenir immédiatement de l’activation, alors que l’opération asynchrone continue de se dérouler en arrière-plan.

 

processed: function (element, options) {
            // During an initial activation this event is called before activation completes.
            // Do any initialization work that is required for the initial UI to be complete.
            // Retrieve settings from a file
            return app.local.readText(settingsFile, "default").then(function (str){
                //use the settings to update the UI
            }, function () {
                //handle the error condition
               });
           },

ready:     function (element, options) {
            // During an initial activation this event is called after activation completes.
            // Do any initialization work that is not related to getting the initial UI set up.
           }

Remarques

Lorsque l’application est lancée, l’événement activé est déclenché après l’événement DOMContentLoaded et avant l’événement WinJS.Application.onloaded. Lorsque l’application est en cours d’exécution, les événements activés peuvent être déclenchés à n’importe quel moment.

Remarque  Si votre application doit parcourir le document de niveau supérieur pour une raison quelconque, vous devez d’abord terminer l’activation avant de tenter de procéder à la navigation de niveau supérieur. Si vous tentez une navigation de niveau supérieur avant la fin de l’activation, votre application se bloque. Cela permet de garantir que votre application et le système sont dans un état cohérent avant que le contexte JavaScript ne soit détruit et recréé pendant la navigation.

 

Remarque  

Sur les applications du Windows Phone Store, l’événement resuming est toujours suivi de l’événement activated, même quand votre application est actuellement suspendue et que l’utilisateur relance votre application à partir d’une vignette principale ou d’une liste d’applications. Les applications peuvent ignorer l’initialisation si un contenu est déjà défini sur la fenêtre active. Vous pouvez vérifier la propriété LaunchActivatedEventArgs.TileId pour déterminer si l’application a été lancée à partir d’une vignette principale ou secondaire et, en fonction de l’information obtenue, décider si vous devez présenter une expérience de nouvelle exécution ou de reprise d’exécution de l’application.

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 suspendre une application

Comment relancer une application

Conceptuel

Cycle de vie des applications

Référence

Windows.ApplicationModel.Activation.ActivationKind

Windows.UI.WebUI.WebUILaunchActivatedEventArgs

WinJS.Application.activated