CarService

什么是CarService

CarService以一个apk的系统级应用形态,提供了一系列与车相关的一些列服务。上层应用通过CarService进行车辆信息展示和车身控制,为Android Automotive 系统的核心定制服务。

CarService与Vehicle HAL进行通信,进而通过车载总线(例如CAN总线)与车身进行通讯,为上层业务提供业务场景接口,完成对车身的控制与状态显示。

整体架构

📷 [图片: CarService 整体架构图 (diagram)]

CarService服务整体为典型的跨进程C/S架构,CarService服务首次由SystemServer进程启动。

汽车服务进程(CarService)

CarService 作为代理服务组件容器,负责服务聚合组件ICarImpl的生命周期。ICarImpl 依托于Vehicle HAL通信句柄提供的底层能力,组合分化出各种功能服务:

📷 [图片: ICarImpl 服务聚合组件架构图 (diagram)]

ICarImpl 会作为系统服务注册进服务发现管理器ServiceManager,同时也作为CarService组件对外提供的通信Binder。

应用进程

应用进程指的是使用CarService服务的客户端进程。

Car为服务的客户端,为应用侧提供了封装、整合的顶层API。主要由两大功能,一是负责与汽车服务进程的跨进程可靠性链接,二是负责维护服务于特定场景的各种manager,这些manager整合了来自于ICarImpl 的各种服务能力,使得业务侧能很方便的使用这些能力。

📷 [图片: 应用进程 Car 客户端架构图 (diagram)]

connection 负责与CarService建立ipc通道,可靠性上主要通过间隔一定时间重复尝试来提升链接成功率。

当下层硬件出现问题,导致Vehicle HAL Binder死亡,CarService进程会自杀等待系统重新拉起(persistent),客户端检测到链接断开,在没有自定义处理的情况下也会自杀。

📥 抓取自飞书 wiki 空间 7541192071952990209,obj_token: HaAWdPb7eoBAfYx2TkTceqQZnPb