组件生命周期

本文档介绍了组件管理器如何与各个组件实例交互以管理其生命周期。

生命周期状态

组件实例会经历以下主要生命周期状态:

组件生命周期状态

组件实例可以在未运行时在存储媒介上保留隔离的持久状态,这可用于帮助它们在重启时保持连续性。

创建日期

可通过以下方式创建组件实例:

  • 配置为组件管理器的根组件。
  • 作为另一个组件的子项被静态发现。
  • 在运行时在集合中动态创建。

每个组件实例都有一个描述如何解析组件的组件网址,以及一个通过实例从根目录到路径来唯一标识该实例的名称。如需了解详情,请参阅组件标识符

创建组件实例后,您就可以解析销毁组件实例。

已解决

解析组件实例会提取指定组件网址的组件声明。组件管理器通过查找环境中支持匹配网址架构的组件解析器来解析组件网址。开发者可以使用 ffx component resolve 命令手动解析组件。

组件必须先成功解析,然后才能启动

已开始

启动组件实例会加载并运行组件的程序,并使其能够访问所需功能。

启动组件实例最常见的原因是,另一个组件绑定到它公开的某项功能。开发者还可以使用 ffx component start 命令手动启动组件。

启动后,组件实例会继续运行,直到停止为止。

已停止

停止组件实例会终止组件的程序,但保留其持久性状态。组件会在其程序退出时进入此状态(由组件的运行程序定义)。

组件框架可能会出于以下原因停止组件实例:

  • 组件即将销毁。
  • 系统正在关闭。

组件可以实现生命周期处理程序(示例)来接收事件通知,例如即将终止。请注意,在资源耗尽、崩溃或电源故障等情况下,组件可能无法收到这些事件。

停止后,组件实例可能会重启关停

关机

组件管理器会将组件实例的最终执行状态设置为关闭,以指示该实例无法重启并指示该实例可以安全销毁

已销毁

组件实例可以通过以下方式销毁:

  • 在运行时从集合中动态移除。如果该组件是所移除的另一个组件的后代,也是如此。

销毁后,组件管理器会从组件拓扑中完全移除实例,包括所有持久状态。同一组件的新实例将具有自己的身份和状态,并且与之前的所有实例不同。

生命周期操作

本部分介绍了组件框架用于转换组件实例的生命周期状态的常见操作。

装订

A 连接到 B 提供的某项功能时,组件实例 A 会绑定到另一个组件实例 B如果 B 组件尚未运行,这会导致该组件启动

具体而言,A 可以通过两种方式绑定到 B

  • A 会连接到其命名空间中由 B 公开提供的 capability。这是最常见的方式。
  • A 会绑定到由 B 公开或提供的 fuchsia.component.Binder 框架协议。与传统功能不同,此协议是由组件框架实现的。