SettingsCarPropertyManager 源码解析

本目录是对 SettingsCarPropertyManager 的系统性源码梳理,多流程图、多视角。 梳理日期:2026-07-07 | 仓库:MiCarSettings | 分支:dev

这是什么

SettingsCarPropertyManager 是 MiCar Settings 应用读写车辆信号的统一入口,对 AOSP Car / CarPropertyManager 的二次封装。被 82 个文件引用,是车辆设置(灯光、车门、驾驶模式、充电……)的地基。

业务 Controller (CarPropertyMgrPreferenceController)
        ↓  setCarManagerCallback(CarPropertyManagerCallback)
SettingsCarPropertyManager          ← 本目录解析的对象
        ↓  委托
VehicleControlManager               ← 屏蔽 dcd/xcd 平台差异
        ↓
AOSP Car / CarPropertyManager

文档导航

文档内容主要图表
01-总览与使用方.md职责定位、核心能力、API 清单、谁在用、怎么用架构分层图、使用分布表
02-依赖关系图.md它依赖的 8 个核心类各自干什么mermaid classDiagram
03-读写信号全链路时序图.md读/写信号从 Controller 到车端的完整链路2 张 mermaid sequenceDiagram
04-超时监控与回调机制.md超时状态机、回调双层结构、缓存策略mermaid stateDiagram + flowchart

源码位置

base/settingsVehicleLib/src/main/java/com/android/car/settings/miauto/vehicle/SettingsCarPropertyManager.kt  (693 行)

核心结论速记

  1. 不是单例——每个 Controller new 一个,绑定 Lifecycle 自动 release()
  2. 读写都过它——业务永远不直接碰 AOSP Car,绕过它等于裸跑(无缓存、无超时、无异常兜底)。
  3. 自动注册 callback——getProperty 一次后,该信号的变化会被自动监听(记到 mNoNeedObservedPropertyIdSet)。
  4. 超时监控是核心增值——下发后启动 Handler 延时计时,回弹后按 CarPropertyTimeoutFlag(CONTINUE/RESTART/REMOVE)决策,真超时则 onSetPropertyTimeout + 数据校验 onDataVerifyFailed
  5. 缓存 key = propId#areaId——首次缓存可由 VehiclePropertyConfig.getPropValueForFirstCache 注入”初始终态值”供 UI 展示。

相关业务知识库见 ../座舱车门知识库/,其中有基于本类的车门场景实战(JIRA 1838/1839)。