Lebenszyklus von Chrome-Apps

Die App-Laufzeit und die Ereignisseite sind für die Verwaltung des App-Lebenszyklus verantwortlich. Die App-Laufzeit verwaltet die App-Installation, steuert die Ereignisseite und kann die App jederzeit herunterfahren. Auf der Ereignisseite werden Ereignisse aus der App-Laufzeit überwacht und verwaltet, was und wie gestartet wird.

So funktioniert der Lebenszyklus

Die App-Laufzeit lädt die Ereignisseite vom Computer eines Nutzers und das Ereignis onLaunch() wird ausgelöst. Dieses Ereignis gibt der Ereignisseite an, welche Fenster geöffnet werden sollen und welche Abmessungen sie haben sollen.

Funktionsweise des App-Lebenszyklus

Wenn die Ereignisseite kein ausführendes JavaScript, keine ausstehenden Callbacks und keine geöffneten Fenster enthält, entlädt die Laufzeit die Ereignisseite und schließt die Anwendung. Vor dem Entladen der Ereignisseite wird das Ereignis onSuspend() ausgelöst. So können auf der Ereignisseite einfache Bereinigungsaufgaben ausgeführt werden, bevor die App geschlossen wird.

Ereignisseite und -fenster erstellen

Alle Apps müssen eine Ereignisseite haben. Diese Seite enthält die Logik der obersten Ebene der Anwendung ohne eigene Benutzeroberfläche und ist für das Erstellen der Fenster für alle anderen App-Seiten verantwortlich.

Ereignisseite erstellen

Fügen Sie zum Erstellen der Ereignisseite das Feld „background“ in das App-Manifest und background.js in das Scripts-Array ein. Alle Bibliotheksscripts, die auf der Veranstaltungsseite verwendet werden, müssen zuerst dem Feld „background“ hinzugefügt werden:

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

Deine Veranstaltungsseite muss die Funktion onLaunched() enthalten. Diese Funktion wird aufgerufen, wenn Ihre Anwendung auf irgendeine Weise gestartet wird:

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

Fenster erstellen

Auf einer Eventseite können nach Belieben ein oder mehrere Fenster erstellt werden. Diese Fenster werden standardmäßig mit einer Skriptverbindung zur Veranstaltungsseite erstellt und können von der Veranstaltungsseite direkt in Scripts eingefügt werden.

Fenster in Chrome-Apps sind nicht mit Chrome-Browserfenstern verknüpft. Sie haben einen optionalen Frame mit einer Titelleiste und Größensteuerelementen sowie eine empfohlene Fenster-ID. Fenster ohne IDs werden nach dem Neustart nicht wieder in ihrer ursprünglichen Größe und Position wiederhergestellt.

Hier ein Beispielfenster, das mit background.js erstellt wurde:

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

Einführungsdaten einschließen

Je nachdem, wie Ihre App veröffentlicht wird, müssen Sie möglicherweise Startdaten auf Ihrer Ereignisseite verarbeiten. Standardmäßig gibt es keine Startdaten, wenn die App über den App Launcher gestartet wird. Bei Apps mit Datei-Handlern müssen Sie den Parameter launchData.items verarbeiten, damit sie mit Dateien gestartet werden können.

Auf App-Laufzeitereignisse warten

Die App-Laufzeit steuert die Installation, Aktualisierung und Deinstallation der App. Sie müssen nichts weiter unternehmen, um die App-Laufzeit einzurichten. Ihre Ereignisseite kann jedoch auf das Ereignis onInstalled() warten, um lokale Einstellungen zu speichern, und auf das Ereignis onSuspend(), um einfache Bereinigungsaufgaben auszuführen, bevor die Ereignisseite entladen wird.

Lokale Einstellungen speichern

chrome.runtime.onInstalled() wird aufgerufen, wenn Ihre App zum ersten Mal installiert oder aktualisiert wurde. Jedes Mal, wenn diese Funktion aufgerufen wird, wird das Ereignis onInstalled ausgelöst. Die Ereignisseite kann auf dieses Ereignis warten und mit der Storage API lokale Einstellungen speichern und aktualisieren (siehe auch Speicheroptionen).

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

Datenverluste verhindern

Nutzer können Ihre App jederzeit deinstallieren. Nach der Deinstallation bleiben kein ausgeführter Code und keine privaten Daten mehr zurück. Dies kann zu Datenverlusten führen, da die Nutzer möglicherweise eine App deinstallieren, die lokal bearbeitete, nicht synchronisierte Daten enthält. Sie sollten Daten zwischenspeichern, um Datenverluste zu vermeiden.

Zumindest solltest du die Nutzereinstellungen so speichern, dass Nutzer ihre Informationen auch dann wiederverwenden können, wenn sie deine App neu installieren. Mit der Storage API (storage.sync) können Nutzerdaten automatisch mit der Chrome-Synchronisierung synchronisiert werden.

Vor dem Schließen der App bereinigen

Die App-Laufzeit sendet das Ereignis onSuspend() an die Ereignisseite, bevor es entladen wird. Ihre Ereignisseite kann auf dieses Ereignis warten, Bereinigungsaufgaben ausführen und den Status speichern, bevor die App geschlossen wird.

Sobald dieses Ereignis ausgelöst wird, beginnt die App-Laufzeit mit dem Schließen der App. Wenn die App geöffnete Fenster hat, kann sie in Zukunft über das Ereignis onRestarted neu gestartet werden. In diesem Fall sollte die App ihren aktuellen Status im nichtflüchtigen Speicher speichern, damit sie im selben Status neu gestartet werden kann, wenn sie ein onRestarted-Ereignis empfängt. Die App hat nur wenige Sekunden Zeit, ihren Status zu speichern, bevor sie beendet wird. Daher ist es empfehlenswert, den App-Status schrittweise zu speichern, während die App normal ausgeführt wird.

Nach Erhalt von onSuspend werden keine weiteren Ereignisse an die App gesendet, es sei denn, die Sperrung wird aus irgendeinem Grund abgebrochen. In diesem Fall wird die onSuspendCanceled an die App gesendet und die App wird nicht entladen.

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