Share via


Cómo administrar la activación de aplicaciones (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Aprende a definir la experiencia de activación para tu aplicación de Windows en tiempo de ejecución.

Siempre que se inicie tu aplicación, se genera el evento activated. Este evento también puede generarse mientras tu aplicación se está ejecutando si el sistema necesita pasar los parámetros de la aplicación relacionados con un nuevo contrato de activación. Puedes usar el evento activated para restaurar el estado anterior de tu aplicación y recuperar los parámetros de activación relacionados con el contrato para el que tu aplicación se está activando. Para obtener una lista completa de los contratos de activación y más detalles sobre sus parámetros, consulta la enumeración ActivationKind.

Los siguientes pasos te mostrarán cómo registrarse para el evento activated, usarlo para restaurar algún estado básico de la aplicación y usarlo para controlar una activación predeterminada desde un icono.

Instrucciones

Paso 1: registrarse para el evento activated

Haz el registro para el evento activated en el ámbito global. En este ejemplo se establece activatedHandler como controlador de activación. El controlador de activación permite recuperar el estado anterior de ApplicationExecution de la aplicación y los argumentos de activación. Para ver una lista de los tipos de activación, consulta la enumeración ActivationKind.


var app = WinJS.Application;

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

Paso 2: Restaurar los datos de la aplicación si se suspendió y después finalizó

El sistema operativo puede finalizar tu aplicación por diversos motivos después de haberse suspendido. Algunos ejemplos de cuándo puede producirse esto son: el usuario cierra manualmente tu aplicación, el usuario cierra sesión o el sistema se está quedando sin recursos. Si el usuario inicia tu aplicación después de que el sistema operativo la haya finalizado, recibe un evento activated. Usa el objeto sessionState para determinar si necesitas restaurar los datos de tu aplicación o iniciar con sus valores predeterminados. Si tus variables de sessionState están definidas, úsalas para restaurar los datos de tu aplicación y actualizar el contenido mostrado. Si no están definidas, carga los valores predeterminados.

También puedes usar la propiedad PreviousExecutionState en los argumentos del evento para determinar si la aplicación debe restaurar o no su estado. Si esta propiedad tiene el valor ApplicationExecutionState de Terminated, deberías restaurar el estado. Si tiene algún otro valor, deberías cargar los valores predeterminados de la aplicación.

Nota   Si tu aplicación se está activando mientras ya está ejecutándose, debes tener cuidado de no restaurar los datos guardados.

 

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             
      }

   }
}

Paso 3: Si se inicia en una máquina nueva, consultar si existen iconos secundarios

// 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 
      }
   });
}

Paso 4: Recuperar los argumentos de activación

Cuando el sistema active tu aplicación, es posible que haya contexto adicional para la activación.

Cada tipo de contrato de activación tiene su propio conjunto exclusivo de parámetros que te proprocionan más información sobre por qué está activándose tu aplicación. Las clases eventArgs para cada contrato se definen en el espacio de nombres Windows.UI.WebUI. Este fragmento de código muestra cómo recuperar argumentos desde un inicio de icono predeterminado.

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();)

    }
}

Paso 5: Configurar la interfaz de usuario de la aplicación

Cuando controles la activación para un primer inicio, el sistema mostrará la pantalla de presentación hasta que tu aplicación complete la activación. En algunos casos, tu aplicación puede tener que realizar trabajo asincrónico, como leer la configuración desde un archivo, para inicializar su UI de manera correcta. Este trabajo debe realizarse durante la activación para que la pantalla de presentación no se desactive hasta que se complete tu UI. Puedes postergar la finalización de la activación usando el método setPromise() en las clases eventArgs de activación. En el fragmento de código anterior, se usa setPromise() para aplazar la finalización de la activación hasta que la llamada asincrónica a processAll() se complete.

Si usas las plantillas de Microsoft Visual Studio, se llama a setPromise() automáticamente. Si tienes trabajo asincrónico que debe completarse antes de que la pantalla de presentación se desactive, complétalo durante el evento "procesado" de tu nuevo fragmento de página. Asegúrate de devolver una promesa desde esta actividad asincrónica para demorar la finalización del evento "procesado" hasta que la actividad se complete. Se llama al evento procesado siempre que tu aplicación navegue a un fragmento de página en particular para que te asegures de que cualquier código específico de la activación solo se ejecute en una navegación desencadenada por una activación. En la navegación normal, ese código debe omitirse.

Nota  La pantalla de presentación solamente está destinada a cubrir actividades muy breves que son obligatorias para configurar tu UI inicial. Las actividades de larga duración como las llamadas a la red o la carga de un archivo grande desde el disco no deben realizarse durante la activación. En estos casos, tu aplicación debe configurar una interfaz de usuario de progreso durante la activación o una pantalla de presentación extendida y, a continuación, volver de la activación de inmediato, mientras la operación asincrónica sigue completándose en segundo plano.

 

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.
           }

Observaciones

Cuando se inicia la aplicación, se genera el evento activated después del evento DOMContentLoaded y antes del evento WinJS.Application.onloaded. Mientras se ejecuta la aplicación, los eventos activated pueden generarse en cualquier momento.

Nota  Si tu aplicación necesita navegar por el documento de nivel superior por cualquier motivo, debes completar la activación antes de intentar la navegación de nivel superior. Si intentas una navegación de nivel superior antes de que finalice la activación, tu aplicación se bloqueará. Esto asegura que la aplicación y el sistema están en un estado coherente antes de que el contexto JavaScript se desactive y se vuelva a crear durante la navegación.

 

Nota  

En las aplicaciones de la Tienda de Windows Phone, el evento resuming siempre va seguido del evento activated, incluso cuando la aplicación está suspendida actualmente y el usuario la reinicia desde un icono principal o una lista de aplicaciones. Las aplicaciones pueden omitir la inicialización si ya hay contenido establecido en la ventana actual. Puedes comprobar la propiedad LaunchActivatedEventArgs.TileId para determinar si la aplicación se ha iniciado desde un icono principal o secundario y, según esta información, decidir si deseas presentar una experiencia de aplicaciones nueva o reanudar la existente.

Ejemplo completo

Consulta la muestra de cómo activar y suspender aplicaciones mediante WinJS y la muestra de cómo activar, reanudar y suspender aplicaciones mediante WRL para ver ejemplos de código completo donde se muestra cómo controlar los eventos de ciclo de vida de las aplicaciones.

Temas relacionados

Tareas

Cómo suspender una aplicación

Cómo reanudar una aplicación

Conceptos

Ciclo de vida de la aplicación

Referencia

Windows.ApplicationModel.Activation.ActivationKind

Windows.UI.WebUI.WebUILaunchActivatedEventArgs

WinJS.Application.activated