车机 WLAN 知识库 — README 导读

代码基线:/home/zbc/car/fuben_micarsettings/MiCarSettings @ dev 分支 + f3 flavor(A17) 覆盖:WLAN 页面/开关/扫描列表/连接/忘网/详情页/NetworkRequest 弹窗 + vendored WifiTrackerLib 建库方法:6 个并行代码调研(agent)产物 + 组稿 + 对抗 review,所有论断带 file:line;[待验证] 标记处未实证。 姊妹库:蓝牙知识库(同体例)。

0. 怎么读(小白路线)

  1. 先读 10-WiFi基础概念扫盲——攒世界观(STA/AP/SSID/RSSI/安全体系/DHCP/扫描),全部名词配了”人话+比喻”。
  2. 再读 11-车设页面搭建入门——知道 WLAN 页的骨架怎么拼、Controller 怎么反射出生、条目怎么两阶段上屏(2759 分析产物)。
  3. 然后 20-WiFi框架全景——知道 Settings 只是”遥控器”,真扫描/连接在系统服务,WifiTrackerLib 是翻译官。
  4. 按需进模块流程篇(31~34),每篇 = 时序图/流程图 + 下方对照的代码调用链,照着图跳源码。
  5. 排障从 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侧封装MiWifiTrackerUtilstracker 装配器/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-速查卡

文档主题核心问题
50-类地图与资源锚点类地图/常量/线程模型/zh 文案资源一页纸字典;广播清单;五个认知坑

既有专题文档(建库前已存在,保留)

文档主题核心问题
WLAN-全流程全流程速览(旧版)212 行紧凑版;与 30~34 系列互补(先读系列再读此篇当复习)
WLAN列表重建风暴与ANR机制详解137881 案例深挖ANR 基础教学+重建风暴四环机制;性能类问题必读

关键事实一屏(面试/速答级)

  • 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,实证后回填正文并删条目。