Ciclo de vida de las apps de Chrome

El tiempo de ejecución de la app y la página de eventos son responsables de administrar el ciclo de vida de la app. El tiempo de ejecución de la app administra la instalación de la app, controla la página del evento y puede cerrarla 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 debe 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 hay devoluciones de llamada pendientes ni ventanas abiertas, el entorno 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(). Esto le brinda a la página del evento la oportunidad de realizar tareas de limpieza simples antes de que se cierre la app.

Crea una página y ventanas del evento

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

Página para crear un evento

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

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

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

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

Crea ventanas

La página de un 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 ejecutar secuencias de comandos directamente.

Las ventanas de las Apps de Chrome no están asociadas a ninguna ventana del navegador Chrome. Tienen un marco opcional con barra de título y controles de tamaño, además de un ID de ventana recomendado. Las ventanas sin ID no se restablecerán a su tamaño ni 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
  });
});

Incluidos los datos de lanzamiento

Según cómo se inicie tu app, es posible que debas controlar los datos de inicio en la página del evento. 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.

Escucha eventos de tiempo de ejecución de la app

El tiempo de ejecución controla las instalaciones, actualizaciones y desinstalaciones de la app. No necesitas hacer nada para configurar el tiempo de ejecución de la app, pero la página del evento puede escuchar 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.

Almacena la configuración local

Se llama a chrome.runtime.onInstalled() cuando la app se instala 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 escuchar 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);
});

Evita la pérdida de datos

Los usuarios pueden desinstalar tu app en cualquier momento. Cuando se desinstala, no se quedan códigos de ejecución ni datos privados. Esto puede provocar la pérdida de datos, ya que los usuarios podrían desinstalar una app con datos editados y sin sincronizar de forma local. Debes almacenar los datos de forma temporal para evitar su pérdida.

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

Realiza la limpieza antes de cerrar la app

El tiempo de ejecución de la app envía el evento onSuspend() a la página del evento antes de descargarlo. La página del evento 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 comienza el proceso de cierre. Si la app tiene ventanas abiertas, es posible que se reinicie en el futuro mediante el 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 los cuales se cerrará, por lo que te recomendamos guardar el estado de la app de forma incremental mientras esta se ejecuta con normalidad.

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

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