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

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

ライフサイクルの仕組み

アプリのランタイムがユーザーのパソコンからイベントページを読み込み、onLaunch() イベントが発生します。このイベントは、イベントページで起動するウィンドウとそのサイズを指示します。

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

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

イベントページとイベント ウィンドウの作成

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

イベント作成ページ

イベントページを作成するには、アプリ マニフェストに「background」フィールドを追加し、scripts 配列に 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 アプリのウィンドウは、どの Chrome ブラウザ ウィンドウにも関連付けられていません。タイトルバーとサイズ コントロールを表示した任意のフレームと、推奨されるウィンドウ ID が表示されます。ID のない Windows は、再起動後にサイズと場所に復元されません。

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