Ciclo de vida de las apps de Chrome

El entorno de ejecución de la app y la página de eventos son responsables de administrar el ciclo de vida de la app. El entorno de ejecución de la app administra la instalación de la app, controla la página del evento y puede cerrar la app en cualquier momento. La página de eventos detecta eventos del tiempo de ejecución de la app y administra lo que se inicia y cómo.

Cómo funciona el ciclo de vida

El tiempo de ejecución de la app carga la página del evento desde el escritorio de un usuario y se activa el evento onLaunch(). Este evento le indica a la página del evento qué ventanas iniciar y sus dimensiones.

cómo funciona el ciclo de vida de la app

Cuando la página del evento no tiene JavaScript en ejecución, no tiene devoluciones de llamada pendientes ni ventanas abiertas, el tiempo de ejecución descarga la página del evento y cierra la app. Antes de descargar la página del evento, se activa el evento onSuspend(). De esta manera, la página del evento puede realizar tareas de limpieza simples antes de que se cierre la app.

Crea una página y ventanas del evento

Todas las aplicaciones deben tener una página de evento. Esta página contiene la lógica de nivel superior de la aplicación sin ninguna de su propia IU y es responsable de crear las ventanas para todas las demás páginas de la app.

Página para crear evento

Para crear la página del evento, incluye el campo "background" en el manifiesto de la app y el background.js en el array de secuencias de comandos. Todas las secuencias de comandos de bibliotecas que usa la página del evento deben agregarse primero al campo "background":

"background": {
  "scripts": [
    "foo.js",
    "background.js"
  ]
}

La página del evento debe incluir la función onLaunched(). Se llama a esta función cuando se inicia la aplicación de cualquier manera:

chrome.app.runtime.onLaunched.addListener(function() {
  // Tell your app what to launch and how.
});

Crea ventanas

Una página de evento puede crear una o más ventanas a su discreción. De forma predeterminada, estas ventanas se crean con una conexión de secuencia de comandos a la página del evento y la página del evento puede escribir secuencias de comandos directamente.

Las ventanas de las apps de Chrome no están asociadas con ninguna ventana del navegador Chrome. Tienen un marco opcional con controles de tamaño y barra de título, y un ID de ventana recomendado. Las ventanas sin IDs no se restablecerán a su tamaño y ubicación después del reinicio.

Esta es una ventana de muestra creada a partir de background.js:

chrome.app.runtime.onLaunched.addListener(function() {
  chrome.app.window.create('main.html', {
    id: 'MyWindowID',
    bounds: {
      width: 800,
      height: 600,
      left: 100,
      top: 100
    },
    minWidth: 800,
    minHeight: 600
  });
});

Cómo incluir datos de lanzamiento

Según cómo se inicie tu app, es posible que debas controlar los datos de lanzamiento en tu página de eventos. De forma predeterminada, no hay datos de inicio cuando el selector de aplicaciones inicia la app. En el caso de las apps que tienen controladores de archivos, debes controlar el parámetro launchData.items para permitir que se inicien con archivos.

Cómo escuchar eventos de tiempo de ejecución de apps

El tiempo de ejecución controla las instalaciones, actualizaciones y desinstalaciones de la app. No es necesario que hagas nada para configurar el tiempo de ejecución de la app, pero tu página de eventos puede detectar el evento onInstalled() para almacenar la configuración local y el evento onSuspend() para realizar tareas de limpieza simples antes de que se descargue la página del evento.

Almacenamiento de la configuración local

Se llama a chrome.runtime.onInstalled() cuando se instala tu app por primera vez o cuando se actualiza. Cada vez que se llama a esta función, se activa el evento onInstalled. La página del evento puede detectar este evento y usar la API de Storage para almacenar y actualizar la configuración local (consulta también Opciones de almacenamiento).

chrome.runtime.onInstalled.addListener(function() {
  chrome.storage.local.set(object items, function callback);
});

Cómo evitar la pérdida de datos

Los usuarios pueden desinstalar tu app en cualquier momento. Cuando se desinstala, no se quedan datos privados ni código en ejecución. Esto puede provocar la pérdida de datos, ya que es posible que los usuarios desinstalen una app que tenga datos no sincronizados y editados de forma local. Deberías almacenarlos de forma segura para evitar su pérdida.

Como mínimo, debes almacenar la configuración del usuario para que, si los usuarios reinstalan tu app, su información aún esté disponible para su reutilización. Con la API de Storage (storage.sync), los datos del usuario se pueden sincronizar automáticamente con la sincronización de Chrome.

Limpieza antes de que se cierre la app

El entorno de ejecución de la app envía el evento onSuspend() a la página del evento antes de descargarlo. Tu página de eventos puede detectar este evento, realizar tareas de limpieza y guardar el estado antes de que se cierre la app.

Una vez que se activa este evento, el tiempo de ejecución de la app inicia el proceso de cierre de la app. Si la app tiene ventanas abiertas, puede reiniciarse en el futuro a través del evento onRestarted. En este caso, la app debe guardar su estado actual en el almacenamiento persistente para que pueda reiniciarse en el mismo estado si recibe un evento onRestarted. La app solo tiene unos segundos para guardar su estado, después de lo cual se cerrará, por lo que es una buena idea guardar el estado de la app de forma incremental mientras se ejecuta de forma normal.

Después de recibir onSuspend, no se entregarán más eventos a la app, a menos que se aborte la suspensión por algún motivo. En este caso, onSuspendCanceled se entregará a la app y esta no se descargará.

chrome.runtime.onSuspend.addListener(function() {
  // Do some simple clean-up tasks.
});