Chrome 應用程式生命週期

應用程式執行階段和事件頁面會負責管理應用程式的生命週期。應用程式執行階段可以管理應用程式安裝、控制事件頁面,而且隨時可以關閉應用程式。事件頁面會監聽應用程式執行階段的事件,並管理要啟動的項目和啟動方式。

生命週期的運作方式

應用程式執行階段會從使用者桌面載入事件頁面,並觸發 onLaunch() 事件。這個事件會告知事件頁面要啟動的視窗和其尺寸。

應用程式生命週期的運作方式

如果事件頁面沒有執行中的 JavaScript、沒有待處理的回呼,也沒有開啟的視窗,則執行階段會卸載事件頁面並關閉應用程式。在卸載事件頁面之前,系統會觸發 onSuspend() 事件。這可讓事件頁面在應用程式關閉前執行簡單的清理工作。

建立活動頁面和視窗

所有應用程式都必須有活動頁面。這個頁面包含應用程式的頂層邏輯,且沒有自己的 UI,負責為所有其他應用程式頁面建立視窗。

建立活動頁面

如要建立活動頁面,請在應用程式資訊清單中加入「background」欄位,並在指令碼陣列中加入 background.js。事件頁面使用的所有程式庫指令碼都必須先新增至「背景」欄位:

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

事件頁面必須包含 onLaunched() 函式。應用程式以任何方式啟動時,系統會呼叫此函式:

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

建立視窗

活動頁面可視需要建立一或多個視窗。根據預設,這些視窗會透過與事件頁面建立的腳本連結建立,且可由事件頁面直接編寫腳本。

Chrome 應用程式中的視窗不會與任何 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.
});