通过 event_stream 功能,组件可以订阅 发生在组件生命周期的各个阶段。 其中包括有关组件状态更改以及功能 路由。
有关支持的事件及其说明的完整列表,请参阅
fuchsia.component.EventType
参考文档。请参阅 RFC-121
针对 event_stream 功能的原始 RFC。
提供 event_stream 功能
event_stream 功能始终由组件管理器提供。它们分别是
从 overRoot 中向组件提供单个组件不能声明
事件,capabilities
也不能使用from:
"framework"
每个 event_stream 功能都有一个可选的 scope
,用于确定
事件子树。scope
可以是
单个子树或引用多个子树。
路由 event_stream 功能
组件可以提供从接收的 event_stream 功能 映射到其他组件event_stream 功能无法公开。
如需详细了解该框架如何路由组件功能,请参阅 功能路由。
成为协作者
提供事件功能可让子组件访问该功能:
{
offer: [
{
event_stream: "started",
from: "parent",
scope: ["#child_a"]
to: [ "#child-a", "#child_b" ],
},
{
event_stream: "stopped",
from: "parent",
to: "#child-c",
}
]
}
活动只能通过家长提供。
使用 event_stream 功能
如需使用事件 capability,该组件必须使用 event_stream
功能。可以通过在
单个 use
。
如需请求该功能,请为其添加 use
声明:
{
use: [
{ event_stream: ["started", "stopped"] },
]
}
event_streams 只能在 from: "parent"
中使用。
event_stream 路由示例
请参考以下组件拓扑示例:
请注意此示例的以下几个关键方面:
core/archivist
:通过started
从root
路由的事件功能。// root.cml { offer: [ { event_stream: "started", from: "parent", to: "#core", }, ] } // core.cml { offer: [ { event_stream: "started", from: "parent", to: "#archivist", }, { event_stream: "started", from: "parent", to: "#test_manager", scope: ["#test_manager"], } ] } // archivist.cml { use: [ { event_stream: "started" }, ] }
core/test_manager/archivist
:接收所有测试的started
事件 组件通过从test_manager
路由的事件功能实现。// test_manager.cml { offer: [ { event_stream: "started", from: "parent", to: "#archivist", }, { event_stream: "started", from: "parent", to: "#tests", // Downscopes the event to the tests collection scope: ["#tests"], } ] } - The root Archivist gets `started` events for all components in the topology from the root, whereas the embedded Archivist only gets events from its own test collection. NOTE: An event_stream must be routed through the entire topology from the root component_manager all the way down to the component that wants to use the event. event_streams cannot be used `from: "framework"`, and they are not automatically made available in every component's environment. // archivist.cml { use: [ { event_stream: "started", from: "parent", }, ] }
core/test_manager/tests:test-12345
:接收事物的已启动事件 通过event_stream
capability 传入其集合下,test_manager
。// test-12345.cml { use: [ { event_stream: "started", from: "parent", }, ] }