O tempo de execução do app e a página de eventos são responsáveis por gerenciar o ciclo de vida do app. O app runtime gerencia a instalação do app, controla a página de eventos e pode encerrar o app 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 o ciclo de vida funciona
O ambiente de execução do app carrega a página de eventos da área de trabalho de um usuário, e o evento onLaunch()
é acionado. Esse evento informa à página de eventos quais janelas iniciar e as dimensões delas.
Quando a página de evento não tem JavaScript em execução, callbacks pendentes e janelas abertas, o
ambiente de execução descarrega a página de evento e fecha o app. Antes de descarregar a página de evento, o
evento onSuspend()
é acionado. Isso dá à página do evento 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. Esta página contém a lógica de nível superior do aplicativo sem a própria interface e é responsável por criar as janelas para todas as outras páginas do app.
Página "Criar evento"
Para criar a página do evento, inclua o campo "background" no manifesto do app e 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
app é iniciado de qualquer maneira:
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 à página do evento e podem ser programadas diretamente pela página do evento.
As janelas dos apps do Chrome não estão associadas a nenhuma janela do navegador Chrome. Elas têm um frame opcional com barra de título e controles de tamanho e um ID de janela recomendado. As janelas sem IDs não serão restauradas ao tamanho e à localização após a reinicialização.
Confira um exemplo de janela criada com 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
});
});
Como incluir dados de lançamento
Dependendo de como o app é iniciado, talvez seja necessário processar os dados de início na página do evento. Por
padrão, não há dados de inicialização quando o app é iniciado pelo iniciador de apps. Para apps que têm
gerenciadores de arquivos, é necessário processar o parâmetro launchData.items
para permitir que eles sejam iniciados com
arquivos.
Detectar eventos de execução do app
O tempo de execução do app controla as instalações, as atualizações e as desinstalações. Não é necessário fazer nada para
configurar o ambiente de execução do app, mas sua página de eventos pode detectar o evento onInstalled()
para armazenar
as 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
chrome.runtime.onInstalled()
é chamado quando o app é instalado pela primeira vez ou quando ele é
atualizado. Sempre que essa função é chamada, o evento onInstalled
é acionado. A página de eventos 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 seu app a qualquer momento. Quando desinstalado, nenhum código em execução ou dados particulares são deixados para trás. Isso pode levar à perda de dados, já que os usuários podem desinstalar um app que tem dados não sincronizados editados localmente. Você precisa armazenar dados para evitar a perda deles.
No mínimo, você precisa armazenar as configurações do usuário para que, se os usuários reinstalarem o app, as informações continuem 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.
Fazer a limpeza antes de fechar o app
O ambiente de execução do app envia o evento onSuspend()
para a página de eventos antes de descarregá-lo. Sua página de eventos
pode detectar esse evento, realizar tarefas de limpeza e salvar o estado antes que o app seja fechado.
Depois que esse evento é acionado, o app runtime inicia o processo de fechamento do app. Se o app tiver janelas
abertas, ele poderá ser reiniciado no futuro pelo evento onRestarted
. Nesse caso, o app precisa
salvar o estado atual no armazenamento persistente para que possa ser reiniciado no mesmo estado se receber um
evento onRestarted
. O app tem apenas alguns segundos para salvar o estado. Depois disso, ele será
encerrado. Por isso, é recomendável salvar o estado do app de forma incremental enquanto ele está em execução
normal.
Depois de receber onSuspend
, nenhum outro evento será entregue ao app, a menos que a suspensão seja
abortada por algum motivo. Nesse caso, o onSuspendCanceled
vai ser entregue ao app, que
não será descarregado.
chrome.runtime.onSuspend.addListener(function() {
// Do some simple clean-up tasks.
});