Chrome アプリのライフサイクル

アプリのランタイムとイベントのページは、アプリのライフサイクルを管理します。アプリ ランタイムは、アプリのインストールの管理、イベントページの制御、アプリのいつでもシャットダウンを行います。イベントページでは、アプリ ランタイムからのイベントをリッスンし、何がどのように起動されるかを管理します。

ライフサイクルの仕組み

アプリ ランタイムがユーザーのデスクトップからイベントページを読み込み、onLaunch() イベントがトリガーされます。このイベントは、イベントページに、起動するウィンドウとそのサイズを通知します。

アプリのライフサイクルの仕組み

イベントページで実行中の JavaScript がない場合、保留中のコールバックがない場合、開いているウィンドウがない場合、ランタイムはイベントページをアンロードしてアプリを閉じます。イベントページをアンロードする前に、onSuspend() イベントがトリガーされます。これにより、イベントページはアプリが閉じる前に簡単なクリーンアップ タスクを実行できます。

イベント ページとウィンドウを作成する

すべてのアプリにイベント ページが必要です。このページには、独自の UI のないアプリのトップレベル ロジックが含まれており、他のすべてのアプリページのウィンドウを作成します。

イベント作成ページ

イベントページを作成するには、アプリ マニフェストに「background」フィールドを含め、スクリプト配列に background.js を含めます。イベントページで使用されるライブラリ スクリプトは、まず [background] フィールドに追加する必要があります。

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

イベントページに onLaunched() 関数を含める必要があります。この関数は、アプリの起動時に呼び出されます。

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

ウィンドウを作成する

イベントページでは、独自の裁量で 1 つ以上のウィンドウを作成できます。デフォルトでは、これらのウィンドウはイベントページへのスクリプト接続で作成され、イベントページから直接スクリプト化できます。

Chrome アプリで使用している Windows は、どの Chrome ブラウザ ウィンドウにも関連付けられていません。タイトルバーとサイズ コントロールを備えたフレーム(省略可)と、推奨されるウィンドウ ID があります。ID のないウィンドウは、再起動後にサイズと位置が復元されません。

以下は、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
  });
});

リリース データの含め方

アプリの起動方法によっては、イベントページで起動データを処理する必要がある場合があります。デフォルトでは、アプリ ランチャーによってアプリが起動されたときに起動データはありません。ファイル ハンドラを使用するアプリの場合、launchData.items パラメータを処理して、ファイルとともに起動できるようにする必要があります。

アプリのランタイム イベントをリッスンする

アプリのランタイムは、アプリのインストール、更新、アンインストールを制御します。アプリのランタイムを設定するために何かする必要はありませんが、イベントページで onInstalled() イベントをリッスンしてローカル設定を保存し、onSuspend() イベントをリッスンして、イベントページがアンロードされる前に簡単なクリーンアップ タスクを実行できます。

ローカル設定の保存

chrome.runtime.onInstalled() は、アプリが初めてインストールされたとき、または更新されたときに呼び出されます。この関数が呼び出されると、onInstalled イベントがトリガーされます。イベントページは、このイベントをリッスンし、Storage API を使用してローカル設定を保存および更新できます(ストレージ オプションも参照)。

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

データ損失の防止

ユーザーはいつでもアプリをアンインストールできます。アンインストールしても、実行中のコードや非公開データが残ることはありません。ローカルで編集された同期されていないデータをユーザーがアンインストールすると、データが失われる可能性があります。データの損失を防ぐため、データを隠してください。

少なくとも、ユーザーがアプリを再インストールしても情報を再利用できるように、ユーザー設定を保存する必要があります。Storage API(storage.sync)を使用すると、ユーザーデータは Chrome 同期と自動的に同期できます。

アプリの終了前にクリーンアップする

アプリのランタイムは、イベントページをアンロードする前に、onSuspend() イベントをイベントページに送信します。イベントページでは、このイベントをリッスンして、アプリが閉じる前にクリーンアップ タスクを実行し、状態を保存できます。

このイベントが発生すると、アプリ ランタイムはアプリを終了するプロセスを開始します。アプリでウィンドウが開いている場合は、後で onRestarted イベントを介して再起動される可能性があります。この場合、アプリは現在の状態を永続ストレージに保存して、onRestarted イベントを受信した場合に同じ状態から再起動できるようにする必要があります。アプリは状態を保存する時間が数秒しかなく、その後は終了するため、アプリが正常に実行されている間にアプリの状態を段階的に保存することをおすすめします。

onSuspend を受け取ると、なんらかの理由で一時停止が中断されない限り、それ以上のイベントはアプリに配信されません。この場合、onSuspendCanceled はアプリに配信され、アプリはアンロードされません。

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