4.1 KiB
4.1 KiB
代码重构说明
重构目标
将原本堆在一个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更新
使用说明
- MainActivity: 作为入口点,协调各个管理器
- DataManager: 处理所有数据相关的操作
- UiManager: 负责所有UI相关的更新
- DeviceTypeHelper: 提供设备类型相关的工具方法
- Constants: 集中管理所有常量
- FileHelper: 处理文件读取操作
注意事项
- 原生方法: 所有原生C++方法现在都在DataManager中声明
- 依赖关系: 各个类之间有明确的依赖关系,避免循环依赖
- 线程安全: UI更新始终在主线程进行,数据操作在后台线程进行
- 错误处理: 每个类都有适当的错误处理和日志记录
后续优化建议
- 依赖注入: 可以考虑使用Dagger或Koin进行依赖注入
- 响应式编程: 可以考虑使用RxJava或Flow进行数据流处理
- 单元测试: 重构后的代码更容易进行单元测试
- 文档完善: 可以添加更详细的API文档和示例代码