外观
SDK 实践检查与术语参考
Android 应用开发、设备通信与软硬件一体 SDK 技术笔记
本文档围绕 Android 基础、Kotlin 与 Jetpack、网络通信、BLE 与 Wi-Fi 配网、SDK 设计和性能稳定性展开。阅读目标是理解基础机制,掌握方案取舍,并通过工程案例和运行证据验证结论。
阅读按三条主线展开:Android 基础与异步机制、性能问题的定位闭环、设备通信 SDK 的状态与异常管理。座舱多屏交互和冷启动优化作为贯穿案例;Kotlin、MVVM 和设备通信结合小型验证项目理解。
文档包含 72 个技术主题、4 组代码与设计练习、工程案例、综合场景和两天学习安排。P0 表示优先掌握,P1 表示在基础稳定后补齐;优先级依据知识依赖与工程场景设置。技术版本核对日期为 2026 年 9 月 22 日。
知识结构与阅读方法
技术领域与实践要求
| 技术领域 | 实践要求 | 优先阅读 |
|---|---|---|
| 软硬件一体 SDK 开发与维护 | API 清晰,状态正确,异常可恢复,集成成本可控 | Q40 至 Q56 |
| 四大组件与 Android 基础 | 生命周期、线程、进程、View 机制说得准确 | Q01 至 Q24 |
| Jetpack Kotlin MVVM | 能说明状态归属与生命周期,能读写关键代码 | Q25 至 Q32 |
| OkHttp Retrofit JSON | 会区分分层职责,处理超时、鉴权和弱网 | Q33 至 Q39 |
| BLE Wi-Fi Socket | 能讲完整通信链路,区分连接成功与业务成功 | Q40 至 Q49 |
| 启动 卡顿 内存 功耗优化 | 能从指标和证据定位原因,并验证收益和副作用 | Q57 至 Q64 |
| 兼容性 线上稳定性 团队协作 | 能设计复现矩阵、观测信息、灰度和回滚 | Q55 至 Q56 及 Q65 至 Q72 |
怎样理解一个技术主题
先明确结论,再理解关键机制,最后检查边界和工程场景。例如学习屏幕旋转时的生命周期,先确认旧实例销毁、新实例创建的顺序,再分析重建原因以及数据保存方式。
每个主题分三遍阅读:第一遍看“核心结论”,建立概念;第二遍理解机制和反例;第三遍结合“扩展说明”,用一个具体场景或小段代码验证。不要仅凭读懂文字判断是否掌握。
工程实践背景
贯穿案例来自华为 OD 鸿蒙智能座舱应用开发中的多屏互动模块,主要涉及 Android 原生应用设计与交付,主力语言是 Java。冷启动专项通过 Perfetto 分析主线程、首帧和初始化依赖,结合异步 Inflate、任务后台化、按需加载和初始化时序调整,将响应时延从 380ms 优化到 240ms,启动完成时延从 1200ms 优化到 700ms。案例重点是复杂场景下的性能分析、模块设计和系统联调方法。
指标定义与验证边界见 Q65。Kotlin、BLE 和 Wi-Fi 配网的实验结论应标明验证条件,区分文档学习、小型实验与生产环境中的实际结果。
建议的实践顺序
第一,能够画出“界面事件、ViewModel、Repository、设备 SDK、设备回包、状态更新”的完整路径。第二,能够解释 BLE 从扫描到业务就绪的全过程,以及 TCP 为什么需要组帧。第三,为优化案例记录测量起止点、定位证据、方案取舍与回归结果。
四大组件与生命周期
View 绘制与触摸事件
Java 并发与异步机制
Kotlin Jetpack 与 MVVM
Jetpack 常用组件的职责补充
| 组件 | 解决什么问题 | 使用边界 |
|---|---|---|
| Lifecycle | 感知拥有者的生命周期状态 | 监听和收集应绑定正确拥有者 |
| Room | 为 SQLite 提供结构化访问支持 | 持久化设备记录 注意迁移 事务与线程 |
| WorkManager | 调度可延后且需要可靠执行的工作 | 适合日志补传 不保证某秒立即运行 也不是长连接容器 |
| DataStore | 保存配置或小型结构化数据 | 不代替适合关系查询的大型数据库 |
| Navigation | 管理页面导航与相关状态 | 理解导航图与 ViewModel 作用域 |
| Paging | 分页加载与展示大量数据 | 不应一次把海量设备历史装进内存 |
Room 的事务保证一组数据库操作整体一致,不会自动覆盖外部设备动作。WorkManager 的“可靠执行”也不等于业务天然恰好一次,重试任务仍然需要幂等设计。选组件先看任务性质,再看框架能力。
网络请求与接口联调
BLE Wi-Fi 与 Socket 通信
SDK 架构与工程交付
性能与稳定性优化
工程案例与综合场景
学习路线与实践检查
两天集中学习安排
| 时间块 | 任务 | 完成标准 |
|---|---|---|
| 第一天上午 2 小时 | Q01 至 Q16 组件 View 与帧调度 | 能口述生命周期并解释事件拦截和绘制流程 |
| 第一天下午 2 小时 | Q17 至 Q24 Handler 线程与 Binder | 能判断任务在哪个线程执行以及谁负责取消 |
| 第一天下午 2 小时 | Q25 至 Q32 Kotlin MVVM | 写出并运行一次状态加载与错误处理 |
| 第一天晚上 1 小时 | Q57 至 Q66 性能与项目 | 整理一份项目记录 检查结论是否有证据 |
| 第二天上午 2 小时 | Q40 至 Q49 设备通信 | 不看材料讲完整 BLE 与配网流程 |
| 第二天下午 1.5 小时 | Q33 至 Q39 网络 | 解释超时 重试 鉴权并发与慢请求拆解 |
| 第二天下午 1.5 小时 | Q50 至 Q56 SDK 设计 | 设计 API 状态机 错误分类与测试矩阵 |
| 第二天晚上 1 小时 | Q65 至 Q72 综合实践 | 完成实践检查并补齐理解偏差 |
时间不足时,优先顺序为 Q28 至 Q32、Q17 至 Q24、Q40 至 Q49、Q57 至 Q66,再回到 View 和组件基础。已经熟悉的内容通过小型验证后直接跳过,不必从第一页平均用力。
设备连接与状态面板实践
做一个“设备连接与状态面板”:页面显示连接状态与最近数据,ViewModel 暴露不可变 UI 状态,Repository 调用设备接口;先用 FakeTransport 模拟成功、超时、断连和重复回包,再按条件接入真实 BLE 或 Socket。
**验收点:**旋转后不重复创建连接;重复点击不会产生无限并发;断连后待完成请求能结束;旧会话回调不会改写新会话;退出后没有监听和线程持续增长;UI 高频状态更新不会把命令回包丢掉;错误日志能定位失败阶段。
这项练习用于串联各层知识。实现后保留 README、状态转换说明、复现步骤和实际运行证据,便于后续检查、维护与团队交流;未实现或未验证的部分应明确记录。
一次 45 分钟知识检查
| 时长 | 检查内容 | 核心要点 |
|---|---|---|
| 3 分钟 | 梳理工程背景与目标 | 明确一个可验证的工程案例 |
| 5 分钟 | Q03 Q28 Q29 旋转与 ViewModel | 生命周期顺序 作用域 进程死亡边界 |
| 5 分钟 | Q13 Q16 事件与绘制 | 拦截取消 帧调度 实际呈现区别 |
| 6 分钟 | Q17 Q20 Q23 并发与 IPC | Looper 归属 有界并发 同步 Binder 风险 |
| 7 分钟 | Q41 Q42 Q48 通信 | 回调驱动状态机 业务确认 消息边界 |
| 7 分钟 | Q50 Q51 Q68 SDK 情境设计 | 契约 资源归属 超时与幂等 |
| 8 分钟 | Q65 Q66 性能案例分析 | 指标定义 Trace 证据 方案取舍 回归 |
| 4 分钟 | Q71 Q72 实践边界与协作 | 验证范围明确 协作方法清楚 |
**检查方法:**每一部分按 0 至 3 分记录:0 分表示尚未理解;1 分表示知道定义但不清楚机制;2 分表示定义、机制与边界基本正确;3 分表示能够给出具体场景、运行证据或可验证方案。检查后先修正事实错误和理解偏差,再补充实践记录。
十二条关键结论
- Service 默认不替你创建后台线程,绑定也不必然是跨进程。
- Handler 的执行线程由 Looper 决定,post 到主线程仍会占用主线程。
- suspend 不表示自动切后台,协程顺序调用不会自动并行。
- ViewModel 保留有作用域边界,原对象不能跨进程死亡存活。
- SavedStateHandle 保存小型恢复状态,不替代持久化存储。
- onResume 和 doFrame 结束都不等于目标内容已经实际呈现。
- BLE 连接成功、订阅成功、握手成功与业务成功是不同阶段。
- GATT 操作返回已受理,不能直接当作完成回调。
- TCP 没有业务消息边界,超时也不证明命令没有执行。
- 后台化仍要管理依赖、并发、取消和资源清理。
- 权限要结合系统版本、targetSdk、API 和用户当前授权状态。
- 项目指标要说明起止点、环境、统计方法与自己的实际贡献。
项目接入前需要澄清的问题
“SDK 主要连接哪类设备,BLE、Wi-Fi 和 Socket 各自承担哪些能力?”这能帮助判断工作重点是协议、平台适配还是上层业务。
“SDK 的宿主是内部应用还是外部客户应用,公开 API 和版本兼容如何管理?”这能帮助判断工程交付与支持成本。
“目前最主要的稳定性或性能问题发生在哪个阶段,团队如何获取设备侧与应用侧联合日志?”这有助于确定联调方式与 Perfetto 分析范围。
“项目当前阶段最重要的交付是什么,Android、固件、测试和算法团队怎样分工?”这有助于明确交付预期和协作方式。
术语与官方资料
易混术语速查
| 术语 | 通俗含义 |
|---|---|
| SDK | 给其他开发者集成使用的能力包及接口 文档和示例 |
| BLE | 低功耗蓝牙 常用于发现 控制和小量数据交换 |
| GATT | BLE 中组织与访问服务和特征数据的一套规则 |
| CCCD | 配置客户端接收特征通知或指示的常见描述符 |
| MTU | 某协议层一份传输单元的大小上限 不是直接等于业务载荷 |
| SoftAP | 设备以接入点方式创建热点 |
| IPC | 进程间通信的总称 |
| Binder | Android 常用的进程间通信机制 |
| AIDL | 描述接口并生成 Binder 调用适配代码的工具机制 |
| Parcel | Android 用于组织跨边界传输数据的容器 |
| MVVM | 将界面 状态逻辑与数据职责组织清楚的架构方式 |
| 背压 | 消费跟不上生产时 控制速率 排队或数据保留策略 |
| 幂等 | 同一意图重复执行不会产生额外的业务副作用 |
| TTID 与 TTFD | 初始显示时间与完整显示时间相关的启动指标 |
| ANR | 系统判定应用未及时完成某类响应 |
官方资料索引
正文中的 S 编号对应以下资料。Android 权限、后台限制及库 API 应以项目实际采用的系统、targetSdk 和依赖版本核对。示例用于理解机制,不构成完整的生产 SDK。
S01 Android Developers Activity 生命周期
S02 Android Developers 任务与返回栈
S03 Android Developers 绑定服务
S04 Android Developers 前台服务类型要求
S05 Android Developers App Startup 初始化管理
S06 Android Developers ViewGroup 触摸事件管理
S07 Perfetto FrameTimeline 与卡顿分析
S08 Android Developers Handler API
S09 Android Developers ThreadPoolExecutor API
S10 Kotlin 空安全
S11 Kotlin 协程基础
S13 Android Developers ViewModel 概览
S14 Android Developers ViewModel 保存状态
S15 Kotlin StateFlow API
S16 Android Developers 生命周期感知协程
S17 Square Retrofit API
S18 Square OkHttp 拦截器指南
S19 Android Developers 蓝牙权限
S20 Android Developers BLE 数据传输与通知
S21 Android Developers BluetoothGatt API 与 Android 14 MTU 行为变化
S22 Android Developers Wi-Fi Network Request API
S23 Android Developers 附近 Wi-Fi 设备权限
S24 Android Developers 面向 Android 17 的行为变化
S25 IETF RFC 9293 TCP 规范
S26 Android Developers 应用启动时间
S27 Android Developers AsyncLayoutInflater API
S28 Android Developers Java 内存分析
S29 Android Developers ANR 分析
S30 Android Developers Macrobenchmark 与 Baseline Profiles