Fuchsia模块化的四大组件之三

参考前文:
Fuchsia模块化
Fuchsia模块化的四大组件之一
Fuchsia模块化的四大组件之二

在前文对于Fuchsia模块化的介绍中提到,用户可以通过开发module、agent、entryprovider类别的组件来实现具体的业务逻辑,扩展系统的能力。这三大组件再结合由module组合而成的story,可以称之为是fuchsia系统内的四大组件。前面几篇文章依次对story、module、agent、entryprovider进行了介绍。在介绍story和module时,提高两个概念,用来承载story的storyshell和module 定义的用来处理请求的intent。本文对这两个角色简单的介绍下。

Shell

shell不止有storyShell,shell的职责是组合UI,共有三种shell

  • BaseShell

在会话启动之前用来显示与设备关联的UI

  • SessionShell

显示特定会话的UI界面,这个有点类似于系统级的一些UI,(例如,Story列表,设置界面等)

  • StroyShell

显示Stroy的UI界面(每个Story都有自己的StroyShell实例)

环境

Shell可以调用模块化框架的如下两种服务:

  • fuchsia.modular.ComponentContext

可使agent获得其他组件发布的功能

  • fuchsia.modular.[Base,Session,Story]ShellContext

提供一些Shell这种组件所特有的功能

作为Shell需要提供如下两种服务:

  • fuchsia.modular.[Base,Session,Story]Shel

提供给模块化框架,用来响应显示UI的请求

  • fuchsia.modular.Lifecycle

用来接收来自模块化框架的退出信号,用来管理shell的生命周期

生命周期

三种shell有不同的生命周期

  • BaseShell

运行于basemgr启动后,会话建立之前,当有身份验证的请求时也会运行

  • SessionShell

在会话运行期间运行

  • StoryShell

与与它关联的story的声明周期一致。

Intent

Intent用来指示一个Module去执行相应的Action。Intent通常包含Action的名称,Action需要的参数的描述。可选的,Intent也可以包含一个IntentHandler,用来明确指明该Intent需要哪个Module来执行。

定义Action

Module可以定义它可以处理的Action及Action的参数。模块化框架持有所有Module的索引,当有Intent产生时,会在模块化框架中匹配合适的Module作为处理此Action的候选罗列出了。如何定义Intent,参考之前的文章

处理Intent

模块化框架会对Intent进行解析并且决定哪个Module可以处理它。然后框架会连接到Module的fuchsia::modular::IntentHandler服务,并且调用HandleIntent()。每当由Intent被分发给Module时,框架都会去连接Intent的处理服务,当然,如果Module已经在运行了,也将能够收到发送来的Intent,Module需要对这些发送来的Intent做出正确的处理。

示例

假想有这样一个Story,里面包含有一个餐厅列表Module,当选定一个餐厅时,需要展示该餐厅所在的位置。
餐厅Module需要创建一个Intent,指定它的Action为com.fuchsia.navigate,该action需要包含两个参数,start和end,这两个参数都是com.fuchsia.geolocation类型,然后需要调用ModuleContext.AddModuleToStory将此Intent传递给模块化框架。
然后框架开始查找哪个Module可以处理com.fuchsia.navigate这个action,当找到后便将该Module添加到餐厅Module所在的Story中,并且调用找到的Module的HandleIntent服务,然后将Intent传递给它。这时新启动的导航Module就被添加到Story中并且接收到了Intent,导航Module接下来需要根据传递的action和参数更新自己的UI,然后呈现给用户。
如果餐厅Module在发送com.fuchsia.navigate action时,希望特定的Module对这个action做出响应,比方使用地图Module来处理,则可以通过指定Intent.handler字段为地图Module来实现。

综上,介绍了组件Story、Module、Agent、EntryProvider,也介绍了承载Module UI的Shell,及表示Module对其他Module能力请求的Intent。以上这些一同构成了Fuchsia的组件化框架。

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