元件生命週期

本文說明元件管理工具如何與個別元件例項互動,以管理元件的生命週期。

生命週期狀態

元件例項會經歷下列主要生命週期狀態:

元件生命週期狀態

元件執行個體可能會在儲存媒體上保留隔離的永久狀態,以便在未執行時使用,有助於在重新啟動時維持連續性。

建立時間

建立元件執行個體的方法如下:

  • 設定為元件管理工具的根元件。
  • 靜態探索為另一個元件的子項
  • 在執行階段動態建立於集合中。

每個元件執行個體都有元件網址 (說明如何解析元件) 和路徑名稱 (從根目錄的路徑唯一識別執行個體)。詳情請參閱「元件 ID」。

建立元件執行個體後,即可解析終止

已解決

解析元件執行個體時,系統會擷取指定元件網址的元件宣告。元件管理服務會找出環境中支援相符網址配置的元件解析器,藉此解析元件網址。開發人員可以使用 ffx component resolve 指令手動解決元件問題。

元件必須成功解析,才能啟動

已開始

啟動元件執行個體會載入並執行元件的程式,並提供元件所需的存取權。

啟動元件執行個體最常見的原因,是另一個元件繫結至其中一個公開功能。開發人員也可以使用 ffx component start 指令手動啟動元件。

啟動後,元件執行個體會持續執行,直到停止為止。

已停止

停止元件執行個體會終止元件的程式,但會保留元件的持續性狀態。當元件的執行器定義的程式結束時,元件就會進入這個狀態。

元件架構可能會因下列原因停止元件執行個體:

  • 元件即將遭到刪除。
  • 系統正在關機。

元件可以實作生命週期處理常式 (範例),接收即將終止等事件的通知。請注意,在資源耗盡、當機或斷電等情況下,元件可能不會收到這些事件。

停止後,元件執行個體可以重新啟動關閉

關機

元件管理服務會將元件執行個體的最終執行狀態設為關機,表示無法重新啟動,並發出訊號,指出執行個體可以安全地刪除

已刪除

元件執行個體可能會透過下列方式終止:

  • 在執行階段動態從集合中移除。如果元件是遭移除元件的子項,也會發生這種情況。

一旦銷毀,Component Manager 就會從元件拓撲中完全移除執行個體,包括所有持續性狀態。相同元件的新執行個體會各自擁有身分和狀態,與先前的所有執行個體不同。

生命週期動作

本節說明元件架構用來轉換元件執行個體生命週期狀態的常見動作。

裝訂

當元件執行個體 A 連線至 B 提供的某些能力時,就會繫結至另一個元件執行個體 BA如果元件尚未執行,這會導致元件 B 啟動

具體來說,A 可以透過兩種方式繫結至 B

  • A 會連線至其命名空間中的能力,該功能由 B公開」或「提供」。這是最常見的做法。
  • A 會繫結至 fuchsia.component.Binder 架構通訊協定,該通訊協定是由 B 公開或提供。與傳統能力不同,這個通訊協定是由元件架構實作。

停止訂餐

當元件架構決定關閉元件時,會依據元件及其子項的依附元件決定關閉順序。這項行為是遞迴的,也就是說,關閉元件會關閉該元件下的完整拓撲。

領域內的元件會依特定順序關閉,關閉順序取決於這些元件之間的強烈依附元件。元件之間的依附元件會形成有向無環圖 (DAG),且元件會依目標到來源的順序關閉。

依附元件圖表中會考量所有功能。功能預設會以強烈依附元件的形式提供,但用戶端可以指定 dependency: weak 來提供依附元件。

舉例來說,假設領域包含 ABCD 等元件。我們提供以下優惠:

  • A 強烈建議您BC
  • B 強烈建議提供 C 的能力。
  • C 弱式提供 B 的能力。

以下是相關領域的繪圖:

元件 A、B、C 和 D 的圖表,箭頭顯示關機依附元件。實線箭頭表示強依附元件 (A->B、A->C、B->C),虛線箭頭表示弱依附元件 (C->B)。

關機順序如下:

  • DC 沒有任何依附元件,因此可以按任意順序關閉。
  • B 即可在 C 後關閉。
  • A 即可在 B 後關閉。

弱依附元件

請注意,元件依附元件會形成 DAG,也就是沒有週期。也就是說,在上述範例中,C 無法強烈建議 A 提供能力。

不過,C 可以透過 dependency: "weak" 提供 A 能力。 弱依附元件不屬於依附元件 DAG,也不會影響關機順序。