第4章 核心模块识别与命名:各模块职责初定
SystemUI 作为 Android 系统界面与用户交互的核心载体,其内部模块的边界清晰度直接影响后续拆分的可行性、可维护性与可测试性。本章围绕 状态栏、导航栏、快捷面板、通知面板、锁屏、音量控制 六大核心模块,从 系统分层、组件职责、数据流/控制流/信任链路、选型权衡、风险点、落地步骤、验收标准 六个维度进行职责初定与边界定义,为后续章节的深度拆分奠定架构基础。
4.1 模块全景与职责定义
下表列出 SystemUI 六大核心模块的 层级归属、职责初定、关键接口类型。注意:职责初定只描述该模块“应当做什么”和“不应当做什么”,暂不涉及具体实现方案。
| 模块名称 | 层级归属 | 职责初定 | 关键接口类型 |
|---|---|---|---|
| 状态栏 | 信息展示层 | 显示系统状态(信号、时间、电池、通知图标);提供下拉展开快捷面板的入口;不处理具体业务逻辑,不持有通知详情数据。 | 状态回调、触摸事件、广播监听 |
| 导航栏 | 信息展示层 | 提供返回、主页、最近任务三大导航操作;支持手势导航与按键导航切换;不涉及应用内容、不做页面预加载。 | 按键事件、手势回调、策略接口 |
| 快捷面板 | 交互控制层 | 承载 WiFi、蓝牙、亮度、飞行模式等快捷开关;支持开关状态同步与即时生效;不持久化设置,不存储用户偏好。 | 设置Provider、开关回调、下拉手势 |
| 通知面板 | 交互控制层 | 聚合展示所有应用通知,支持分组、展开、点击、滑动清除等交互;维护通知优先级与渠道分类;不修改通知内容,不发送通知。 | NotificationManager、触摸事件、内容提供 |
| 锁屏 | 安全覆盖层 | 提供解锁认证(PIN/图案/生物识别);在锁定状态下安全展示通知摘要;阻断未授权操作,隔离应用内容;不做系统设置变更。 | 认证回调、通知安全展示、解锁事件 |
| 音量控制 | 系统反馈层 | 控制媒体、闹钟、铃声、通话音量通道;显示音量面板并处理用户调节请求;不介入音频路由策略,不管理音频焦点。 | AudioManager、音量事件、UI刷新 |
职责初定要点: 每个模块的职责描述必须遵循“一个模块只做一类事”的原则,避免职责交叉。例如状态栏只负责“展示”和“入口”,不承载任何开关操作逻辑;锁屏只负责“安全认证与隔离”,不处理音量或通知详情展示。
4.2 模块边界划分原则
模块边界定义是拆分成功与否的关键。以下四条原则贯穿整个拆分过程:
- 最小依赖原则: 模块对外部的依赖应最小化,仅通过明确定义的接口进行通信。例如快捷面板只依赖设置 Provider 的读接口,不直接访问系统数据库。
- 单一职责原则: 每个模块仅承载一类核心职责。导航栏不应包含任何与音量控制相关的逻辑,即使音量键在导航栏附近。
- 安全隔离原则: 锁屏模块与通知面板之间必须建立安全边界,锁屏状态下通知面板不可泄露通知详情,只能传递“有通知”这一元信息。
- 交互闭环原则: 用户在一个模块内的操作应尽量在该模块内完成闭环,避免跨模块跳转。例如音量面板的调节操作不应跳转到设置页面。
边界不清的典型风险: 状态栏混合下拉展开逻辑与通知图标管理,会导致后续拆分时出现循环依赖;锁屏与通知面板共用数据模型,会破坏安全隔离,造成通知详情泄露。每个模块的边界必须在初期用文档锁定,避免后期模糊。
4.3 数据流与控制流分析
模块之间的数据流与控制流决定了信任链路的建立方式。下图展示了六大模块之间的 核心交互关系,箭头方向代表控制流或数据流方向,虚线框代表分层边界。
图中可归纳出以下关键 数据流与控制流路径:
- 状态栏 → 快捷面板: 用户下拉状态栏触发快捷面板展开,此为控制流;状态栏不携带数据,仅传递展开信号。
- 状态栏 → 通知面板: 状态栏展示通知图标,点击图标后控制流跳转至通知面板展示详情;状态栏不缓存通知数据。
- 锁屏 → 通知面板: 锁屏状态下,通知面板只接收“有通知”的布尔信号,不传递通知内容实体,确保安全隔离。
- 导航栏 → 音量控制: 物理音量键事件由导航栏捕获后转发至音量控制模块,导航栏不做音量值判断。
- 快捷面板 ↔ 通知面板: 两者共享下拉区域,存在展开状态联动,但数据模型完全独立,通过事件总线通信。
信任链路分析: 锁屏与通知面板之间的信任等级是最低的——锁屏不信任通知面板能够安全处理通知详情,因此采用“仅传递元信息”的隔离策略。状态栏与快捷面板之间信任等级中等,状态栏信任快捷面板不会滥用展开入口,但状态栏不向快捷面板传递任何敏感数据。导航栏与音量控制之间的信任等级较高,因为两者都属于系统级UI,但导航栏仍不直接操作音量值,仅作为事件转发通道。
4.4 选型权衡与风险点
模块职责初定阶段需要做出若干关键选型权衡,同时识别早期风险:
| 权衡项 | 方案A | 方案B | 推荐 | 理由 |
|---|---|---|---|---|
| 状态栏是否包含下拉入口逻辑 | 包含 | 剥离到快捷面板 | 剥离 | 保持状态栏纯展示,避免入口逻辑与展示耦合 |
| 锁屏是否展示通知详情 | 展示 | 仅展示“有通知” | 仅展示元信息 | 安全隔离要求,防锁屏绕过 |
| 音量控制是否独立窗口 | 独立窗口 | 内嵌在快捷面板 | 独立窗口 | 音量面板需在任意界面弹出,独立窗口更灵活 |
| 快捷面板与通知面板是否共享View | 共享 | 分离 | 分离 | 职责不同,共享View会导致代码耦合与测试困难 |