Fuchsia模块化的四大组件之一

在前文对于Fuchsia模块化的介绍中提到,用户可以通过开发module、agent、entryprovider类别的组件来实现具体的业务逻辑,扩展系统的能力。这三大组件再结合由module组合而成的story,可以称之为是fuchsia系统内的四大组件。本文依次介绍这几种组件都是些什么。

Story

Story实际上是一个逻辑上的概念,存在于运行的过程中,可以理解成是一系列Module的组合。Story本身及其所处的状态可以被存储在fuchsia的分布式存储系统Ledger中以方便在不同的设备间共享。

实现方式

模块化框架使用fuchsia.modular.StoryShelll来显示Story的UI,可以认为StoryShell是Story的容身之所,为Story的运行提供一个运行所需的环境。类似的Fuchsia系统还有另外一个概念叫Runner,可以认为是组件Component运行的容身之所,为Component的运行提供执行的环境。

生命周期

Story可以被创建、删除、开始和停止。创建和删除将影响Story在Ledger中是否存储。开始和停止将决定Story及其中的Module是否运行。

Module

Module是一个用于显示UI的组件,通过作为story的组成部分来运行。多个Module可以被组合为一个Story,Module也可以再添加其他的Module到自己所在的Stroy中。Module中可以嵌套其他的Module,也可以集成到StoryShell中。

环境

Module可以读取模块化框架提供给该module所在命名空间的两种服务:

  • fuchsia.modular.ComponentContext

用来获取在组件(例如: module、agent、shell等)间共享的功能。

  • fuchsia.modular.ModuleContext

用来执行Module管理相关的功能,例如创建Entity或者添加Module到当前Storyshell中等。

一个Module通常需要对外提供如下的三种服务:

  • fuchsia.ui.app.ViewProvider

用来显示Module的UI

  • fuchsia.modular.Lifecycle

用来接受模块化框架发送的的信号来管理Module的生命周期

  • fuchsia.modular.IntentHandler

用来处理来自于模块化框架发来的Intent

生命周期

Module的生命周期依赖于它所在的Story。同一个Module在Story中可以创建多个实例。当一个模块启动另一个模块时,会得到后一个模块的模块控制器,可以通过该控制器来控制被启动模块的生命周期。

通信机制

Module之间通过intent 和 entity 进行通信。Module和Agent之间则使用FIDL 和 消息队列进行通信。

Module的声明

Module通过在Component manifest中的module facet部分来描述Module在运行期所具备的能力。

Componet facet是Componet清单文件中的一块区域,在该区域中所做的配置不会被Componet Manager关心。组件化框架定义了fuchsia.module 这一facet。在这一facet中Module的作者可以指定Module特有的属性。

下面的示例是component清单文件中对于module facet部分的定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"facets": {
"fuchsia.module": {
//版本说明
"@version": 2,
// 当向用户推荐该Module时展示的该Module的人性化的说明
"suggestion_headline": "See details about person",
// 定义一系列该Module可以处理的Action,当有多个Module被匹配时,将提
// 供Module列表供选择
"intent_filters": [
{
// 表示一个该module可以处理的功能
"action": "com.google.fuchsia.preview.v1",
// action 携带的参数
"parameters": [
{
"name": "entityToPreview",
"type": "https://fuchsia.com/types/Friend"
}
]
}
],
//用来说明该Module在Story中的组合方式
//取值:ticker 该module将显示在其他Module下面
//取值:comments-right 该module将显示在其他Module的下面
"composition_pattern": "ticker"
}
}
}

该示例中的module可被action com.google.fuchsia.preview.v1调起,并传递类型为https://fuchsia.com/types/Friend的参数entityToPreview。

robot wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!