Ciclo de vida do app do Chrome

O ambiente de execução do app e a página do evento são responsáveis por gerenciar o ciclo de vida do app. O ambiente de execução gerencia a instalação do app, controla a página de eventos e pode encerrá-lo a qualquer momento. A página de eventos detecta eventos do ambiente de execução do app e gerencia o que é iniciado e como.

Como funciona o ciclo de vida

O ambiente de execução do app carrega a página do evento no computador do usuário e o evento onLaunch() é acionado. Esse evento informa à página quais janelas serão abertas e as dimensões delas.

como funciona o ciclo de vida do app

Quando a página do evento não tem JavaScript em execução, nenhum callback pendente nem janelas abertas, o tempo de execução descarrega a página do evento e fecha o app. Antes de descarregar a página do evento, o evento onSuspend() é acionado. Isso dá à página de eventos a oportunidade de realizar tarefas simples de limpeza antes que o app seja fechado.

Criar página e janelas de eventos

Todos os apps precisam ter uma página de evento. Essa página contém a lógica de nível superior do aplicativo sem nenhuma IU própria e é responsável por criar as janelas para todas as outras páginas do app.

Criar página de evento

Para criar a página do evento, inclua o campo "background" no manifesto do app e inclua o background.js na matriz de scripts. Todos os scripts de biblioteca usados pela página do evento precisam ser adicionados primeiro ao campo "background":

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

A página do evento precisa incluir a função onLaunched(). Essa função é chamada quando o aplicativo é iniciado de alguma forma:

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

Criar janelas

Uma página de evento pode criar uma ou mais janelas a seu critério. Por padrão, essas janelas são criadas com uma conexão de script com a página do evento e podem ser scripts diretamente pela página do evento.

As janelas nos apps do Chrome não estão associadas a nenhuma janela do navegador Chrome. Elas têm um frame opcional com controles de barra de título e tamanho, além de um ID de janela recomendado. As janelas sem IDs não são restauradas para o tamanho e o local após a reinicialização.

Veja um exemplo de janela criada em 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
  });
});

Incluindo dados de lançamento

Dependendo de como o app é iniciado, pode ser necessário processar dados de lançamento na página de evento. Por padrão, não há dados de inicialização quando o app é iniciado pelo Acesso rápido aos apps. Para apps que têm gerenciadores de arquivos, gerencie o parâmetro launchData.items para permitir que eles sejam iniciados com arquivos.

Detectar eventos de execução do app

O ambiente de execução do app controla as instalações, as atualizações e as desinstalações do app. Não é necessário fazer nada para configurar o ambiente de execução do app, mas a página de eventos pode detectar o evento onInstalled() para armazenar configurações locais e o evento onSuspend() para realizar tarefas simples de limpeza antes que a página do evento seja descarregada.

Como armazenar configurações locais

O chrome.runtime.onInstalled() é chamado quando o app é instalado pela primeira vez ou quando é atualizado. Sempre que essa função é chamada, o evento onInstalled é disparado. A página do evento pode detectar esse evento e usar a API Storage para armazenar e atualizar as configurações locais. Consulte também Opções de armazenamento.

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

Como evitar a perda de dados

Os usuários podem desinstalar o app a qualquer momento. Quando desinstalado, nenhum código de execução ou dados privados são deixados para trás. Isso pode levar à perda de dados, porque os usuários podem estar desinstalando um app que tem dados editados localmente e não sincronizados. Guarde os dados para evitar perdas.

No mínimo, você precisa armazenar as configurações do usuário para que, se os usuários reinstalarem o app, as informações deles ainda estejam disponíveis para reutilização. Usando a API Storage (storage.sync), os dados do usuário podem ser sincronizados automaticamente com a Sincronização do Chrome.

Limpeza antes do fechamento do app

O ambiente de execução do app envia o evento onSuspend() para a página do evento antes de descarregá-lo. A página do evento pode detectar esse evento, realizar tarefas de limpeza e salvar o estado antes que o app seja fechado.

Quando esse evento é disparado, o ambiente de execução do app inicia o processo de fechamento dele. Se o app tiver janelas abertas, ele poderá ser reiniciado no futuro por meio do evento onRestarted. Nesse caso, o app precisa salvar o estado atual no armazenamento permanente para que possa ser reiniciado no mesmo estado se receber um evento onRestarted. O app tem apenas alguns segundos para salvar o estado. Após esse período, ele será encerrado. Por isso, é recomendável salvar o estado do app de forma incremental enquanto ele está em execução normalmente.

Depois de receber onSuspend, nenhum outro evento será entregue ao app, a menos que a suspensão seja cancelada por algum motivo. Nesse caso, o onSuspendCanceled será entregue ao app e o app não será descarregado.

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