车机 WLAN 知识库 — README 导读
代码基线:/home/zbc/car/fuben_micarsettings/MiCarSettings @ dev 分支 + f3 flavor(A17)
覆盖:WLAN 页面/开关/扫描列表/连接/忘网/详情页/NetworkRequest 弹窗 + vendored WifiTrackerLib
建库方法:6 个并行代码调研(agent)产物 + 组稿 + 对抗 review,所有论断带 file:line;[待验证] 标记处未实证。
姊妹库:蓝牙知识库(同体例)。
0. 怎么读(小白路线)
- 先读 10-WiFi基础概念扫盲——攒世界观(STA/AP/SSID/RSSI/安全体系/DHCP/扫描),全部名词配了”人话+比喻”。
- 再读 11-车设页面搭建入门——知道 WLAN 页的骨架怎么拼、Controller 怎么反射出生、条目怎么两阶段上屏(2759 分析产物)。
- 然后 20-WiFi框架全景——知道 Settings 只是”遥控器”,真扫描/连接在系统服务,WifiTrackerLib 是翻译官。
- 按需进模块流程篇(31~34),每篇 = 时序图/流程图 + 下方对照的代码调用链,照着图跳源码。
- 排障从 40-排障速查 进;50-速查卡 当字典。
文档索引
10-基础概念篇
| 文档 | 主题 | 核心问题 |
|---|
| 10-WiFi基础概念扫盲 | STA/SSID/RSSI/安全/DHCP/扫描 | ★小白第一课;车机 vs 手机 5 差异;名词↔代码实体对照表 |
| 11-车设页面搭建入门 | Preference框架/Controller反射装配/布局三层/条目两阶段fill | ★小白第二课(App侧);onAttach装配车间;preferenceTheme冷知识;已连接卡片与详情按钮;5认知坑 |
20-Android框架篇
| 文档 | 主题 | 核心问题 |
|---|
| 20-WiFi框架全景 | 分层地图/WifiManager 调用清单/四大广播 | ★第二课;一轮扫描心跳时序+代码链;MIUI 定制点速览 |
| 21-WifiTrackerLib架构 | 双线程/条目缓存/ScanResultKey/WifiEntry 状态机 | 库核心;connectedState 3 态;mLevel 两套来源;子类实况(只有 Standard 活着) |
| 22-双flavor差异 | f3dif(A17) vs xcddif(A14) | ★对代码前必读;五处行为差异(广播时序/扫描gate/5min兜底);死代码警示 |
| 23-App侧封装MiWifiTrackerUtils | tracker 装配器/Listener 翻译/isNeedAddInList 过滤 | 21 篇姊妹篇;每页一份无复用;InstanceGetter 借实例;★15s 窗过滤三件套(2759/2548 承重点) |
30-模块流程篇
| 文档 | 主题 | 核心问题 |
|---|
| 30-页面与导航 | Activity/Fragment/Provision/NetworkRequest | 页面地图;manifest 细节;★布局四层注入链(骨架/内容分层);引导链分流;第三方要网弹窗 |
| 31-开关与自动连接 | 总开关/入口文案/auto-join | 开关翻面全时序;三层防抖;★146231 瞬态空窗防护;无联动澄清 |
| 32-扫描与列表刷新 | 全量重建世界 | ★列表类 bug 分析框架;端到端时序;防闪两件套;137881 风暴引子 |
| 33-连接流程 | 点击→密码框→connect→文案 | 三入口殊途;NO_CONFIG 回弹;失败 4 层反馈;★3405 教训 |
| 34-忘记网络与列表时序 | forget 全链/竞态窗口 | 无乐观移除;竞态窗口 A/B;★2901/131987/2782 机制落点 |
40-排障实战篇
| 文档 | 主题 | 核心问题 |
|---|
| 40-WLAN排障速查 | 三层定位法+现象速查表+案例卡 | ★排障入口;6 张已定案案例卡(131987/2782/3405/3907/137881/2759);日志锚点 |
50-速查卡
既有专题文档(建库前已存在,保留)
关键事实一屏(面试/速答级)
- WLAN 页 =
WifiSettingsActivity(842×864 弹窗,singleTask,:WifiSettings)承载 MiCarWifiListFragment;入口 = 连接主页隐式 intent android.settings.WIFI_SETTINGS。
- 数据引擎 = 每页一份
WifiPickerTracker(10s 扫描/15s 过期/失败 5min 兜底);详情页共享 entry 引用不建 tracker。
- 列表刷新 = 子线程 fill + 主线程 removeAll 全量重建,无 diff;防闪靠 ComparisonCallback + guardTransientEmpty(500ms)。
- 连接:未保存加密网 = connect 试探→NO_CONFIG 回弹密码框;密码框路径 App 自己组 WifiConfiguration 直连(带原 networkId 时是改密重连)。
- 忘网:无乐观移除,靠 CONFIGURED_NETWORKS_CHANGED(binder 往返)收敛;竞态窗口 A(config 先到,高亮卡残留)/B(state 先到,普通 saved 中间态)。
- 失败反馈 4 层:inline 小字(disable reason 映射)/框架失败广播重弹密码框(红字)/再点 shouldEditBeforeConnect 直弹/UNKNOWN 仅日志。
- setWifiEnabled 全仓库唯一调用点 = MiCarWifiUtils.kt:172;无任何热点/蓝牙联动。
- 车机休眠路径:DualWiFi(slave)/MLO/PasspointR1(反射桩+线程名不匹配);活逻辑:CrossSubnetUtils 漫游补 VALIDATED。
维护约定
- 代码更新后:先跑一轮 diff 确认 file:line 是否漂移,再更新对应篇章;
- 新 JIRA 定案后:按 40 篇案例卡格式补卡(现象/根因/机制落点/分析路径);
- [待验证] 清单集中在 40 篇 §4,实证后回填正文并删条目。