# bandwidthcheck — 萤石 Android SDK 带宽检测模块

> 当前结构、接口和调用链由 codegraph 现查；本文只保留边界、语义路由、不变量与必要判据。
> 人工补充：`Human.md`。

## 身份与边界

- **身份**：带宽检测 UI 模块，提供测速输入、测速进程、测速结果、历史记录等页面
- **负责**：带宽检测 UI 展示（输入页/进程页/结果页/历史页）、测速结果本地缓存
- **不负责**：带宽检测底层逻辑（在 play 模块 `EZBWCheckManager`）、SDK 初始化、设备管理
- 证据：source `BWCSpeedTestActivity.java:32` + `EZBWCheckManager`（play 模块）

## 用户表述（需求/症状）→归一主题→首落点

| 用户表述 | 归一主题 | 首落点 | 本组件角色 | 知识卡 |
|---|---|---|---|---|
| 带宽检测/测速/网络检测 | 带宽检测 UI | `BWCSpeedTestInputActivity` | owner(UI) | — |
| 测速结果/测速历史 | 测速结果展示 | `BWCSpeedTestResultActivity` | owner(UI) | — |
| 模拟设备带宽检测 | 设备带宽检测 | `BWCSpeedTestActivity`（bwCheckType） | owner(UI) | — |

## 为什么 / 护栏

1. **核心逻辑不在此模块**：实际测速调用 `EZOpenSDK.getInstance().startBWCheck()`，底层是 play 模块的 `EZBWCheckManager`，本模块仅做 UI。source `BWCSpeedTestActivity.java:128`
2. **检测时间固定 15 秒**：`checkTime = 15`，硬编码。source `BWCSpeedTestActivity.java:39`
3. **测速在子线程执行**：`new Thread(() -> startClientSpeedTest()).start()`，回调需 `runOnUiThread` 切回主线程。source `BWCSpeedTestActivity.java:95`
4. **两种检测类型**：`EZBWCheckClientUpward`（模拟设备带宽检测）和网络测速（客户端），通过 `bwCheckType` 区分。source `BWCSpeedTestActivity.java:202`

## 包/目录清册

| 包 | 分诊 | 说明 |
|---|------|------|
| `com/ezviz/bandwidthcheck/` | 活跃 | 测速页面（输入/进程/结果/历史） |
| `com/ezviz/common/` | 活跃 | 公共基类（RootActivity/TitleBar） |
| `com/ezviz/debug/` | 活跃 | 调试工具 |
| `com/ezviz/demo/` | 活跃 | Demo 配置 |

## 语义影响关系

| 本组件 | 对端 | 关系 |
|--------|------|------|
| BWCSpeedTestActivity | play/EZBWCheckManager | 调用 EZOpenSDK.startBWCheck 触发底层检测 |
| BWCSpeedTestResultActivity | EZBWCheckResult（play 模块） | 使用检测结果 Bean |
| BWCSpeedTestInputActivity | app-common | 被 app-common 的带宽检测入口页调用 |

<!-- 最后更新: 2026-08-18 -->
