0. 背景与目的

X01 的 HU 有两颗 SoC:8155F 和 8155R。

某些应用需要在 8155F 上调用 8155R 的系统服务。例如,启动 8155R 的某个 Activity,查询某个应用是否在 8155R 上安装了等。因此,我们设计了一个远程系统服务 RemoteManagerService。

远程系统服务的实现方式是,会把方法签名按照一定的规则序列化后,通过板间通信方式传递给另一个 SoC,在另一个 SoC 反序列化后调用对应的方法。

1. 服务定义

远程系统服务的定义是提供另一个 SoC 中 SystemService 的 API 调用服务,但不提供所有 API 的调用。有些是因为对应 API 在跨板间调用没有意义(例如 WindowManager 的 addView()),有些是因为我们的技术及时间原因,暂时不会提供。

计划提供的 API:

  1. 简单命令类:参数无需在 Client 端 Manager 做复杂处理,执行命令后无需继续通信。例如,startActivity()
  2. 简单查询类:返回值无需在 Client 端 Manager 做复杂处理。例如,getPackageInfo()。注意,因为板间通信需要的时间不确定,查询类的返回值只能以异步方式回调返回。

前期无计划提供的 API:

  1. 需要在 Client 端 Manager 做复杂处理。因为无法简单评估该处理应该在本地处理还是在远端处理。
    1. AudioManager 的 requestAudioFocus() 方法。
    2. NotificationManager 的 notify() 方法。
  2. 调用一个 API 后有后续的通信需求的。例如,注册 Listener 或在返回对象上继续调用。

2. 软件架构图

软件架构图如下图所示。