137 lines
4.1 KiB
Markdown
137 lines
4.1 KiB
Markdown
# 代码重构说明
|
||
|
||
## 重构目标
|
||
将原本堆在一个MainActivity.kt文件中的所有逻辑分解为多个职责明确的Kotlin文件,提高代码的可读性和可维护性。
|
||
|
||
## 重构后的文件结构
|
||
|
||
### 1. **MainActivity.kt** - 主界面控制器
|
||
**职责**: 主界面逻辑和生命周期管理
|
||
- 初始化各个管理器
|
||
- 处理按钮点击事件
|
||
- 管理Activity生命周期
|
||
- 协调各个管理器之间的交互
|
||
|
||
**主要方法**:
|
||
- `onCreate()`: 初始化UI和管理器
|
||
- `onBleNotify()`: 蓝牙数据通知处理
|
||
- `resetData()`: 重置数据
|
||
- `reloadData()`: 重新加载数据
|
||
|
||
### 2. **Constants.kt** - 常量定义
|
||
**职责**: 集中管理应用中的所有常量
|
||
- UI更新间隔
|
||
- 数据分块大小
|
||
- 缓冲区管理阈值
|
||
- 显示限制参数
|
||
|
||
**主要常量**:
|
||
- `UPDATE_INTERVAL`: UI更新间隔(500ms)
|
||
- `CHUNK_SIZE`: 数据分块大小(64字节)
|
||
- `BUFFER_CLEANUP_THRESHOLD`: 缓冲区清理阈值(50)
|
||
- `BUFFER_KEEP_COUNT`: 缓冲区保留数量(30)
|
||
|
||
### 3. **DeviceTypeHelper.kt** - 设备类型工具
|
||
**职责**: 设备类型相关的工具方法
|
||
- 设备类型名称映射
|
||
- 通道数据详情构建
|
||
|
||
**主要方法**:
|
||
- `getDeviceName()`: 根据数据类型获取设备名称
|
||
- `buildChannelDetails()`: 构建通道数据详情字符串
|
||
|
||
### 4. **DataManager.kt** - 数据管理器
|
||
**职责**: 数据解析、缓冲管理和原生方法调用
|
||
- 管理流式解析器
|
||
- 处理数据块
|
||
- 管理数据缓冲区
|
||
- 调用原生C++方法
|
||
|
||
**主要方法**:
|
||
- `ensureParser()`: 确保解析器已创建
|
||
- `onBleNotify()`: 处理蓝牙通知数据块
|
||
- `processFileData()`: 处理文件数据
|
||
- `cleanupBuffer()`: 智能清理缓冲区
|
||
- `resetData()`: 重置所有数据
|
||
|
||
**原生方法**:
|
||
- `createStreamParser()`: 创建流式解析器
|
||
- `streamParserAppend()`: 向解析器追加数据
|
||
- `streamParserDrainPackets()`: 从解析器拉取数据包
|
||
- `destroyStreamParser()`: 销毁解析器
|
||
|
||
### 5. **UiManager.kt** - UI管理器
|
||
**职责**: UI更新、统计信息构建和显示逻辑
|
||
- 管理UI更新调度
|
||
- 构建统计信息
|
||
- 构建显示内容
|
||
- 触发UI更新
|
||
|
||
**主要方法**:
|
||
- `scheduleUiUpdate()`: 计划UI更新,避免频繁刷新
|
||
- `buildStatisticsString()`: 构建统计信息字符串
|
||
- `buildDisplayContent()`: 构建完整的显示内容
|
||
- `updateDisplay()`: 更新UI显示内容
|
||
|
||
### 6. **FileHelper.kt** - 文件帮助类
|
||
**职责**: 文件读取操作
|
||
- 从assets文件夹读取文件
|
||
|
||
**主要方法**:
|
||
- `readAssetFile()`: 读取assets文件到字节数组
|
||
|
||
## 重构优势
|
||
|
||
### 1. **职责分离**
|
||
- 每个类都有明确的单一职责
|
||
- 降低了类之间的耦合度
|
||
- 提高了代码的可测试性
|
||
|
||
### 2. **代码复用**
|
||
- 工具方法可以在多个地方复用
|
||
- 减少了重复代码
|
||
- 提高了开发效率
|
||
|
||
### 3. **维护性提升**
|
||
- 修改某个功能只需要修改对应的类
|
||
- 代码结构更清晰,易于理解
|
||
- 降低了修改的风险
|
||
|
||
### 4. **可扩展性**
|
||
- 新增功能可以创建新的类
|
||
- 现有类可以独立扩展
|
||
- 支持团队协作开发
|
||
|
||
## 数据流向
|
||
|
||
```
|
||
MainActivity → DataManager → 原生解析器
|
||
↓
|
||
UiManager ← DataManager ← 数据缓冲区
|
||
↓
|
||
UI更新
|
||
```
|
||
|
||
## 使用说明
|
||
|
||
1. **MainActivity**: 作为入口点,协调各个管理器
|
||
2. **DataManager**: 处理所有数据相关的操作
|
||
3. **UiManager**: 负责所有UI相关的更新
|
||
4. **DeviceTypeHelper**: 提供设备类型相关的工具方法
|
||
5. **Constants**: 集中管理所有常量
|
||
6. **FileHelper**: 处理文件读取操作
|
||
|
||
## 注意事项
|
||
|
||
1. **原生方法**: 所有原生C++方法现在都在DataManager中声明
|
||
2. **依赖关系**: 各个类之间有明确的依赖关系,避免循环依赖
|
||
3. **线程安全**: UI更新始终在主线程进行,数据操作在后台线程进行
|
||
4. **错误处理**: 每个类都有适当的错误处理和日志记录
|
||
|
||
## 后续优化建议
|
||
|
||
1. **依赖注入**: 可以考虑使用Dagger或Koin进行依赖注入
|
||
2. **响应式编程**: 可以考虑使用RxJava或Flow进行数据流处理
|
||
3. **单元测试**: 重构后的代码更容易进行单元测试
|
||
4. **文档完善**: 可以添加更详细的API文档和示例代码
|