You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.7 KiB
6.7 KiB
GateAB配置同步机制优化说明
问题解决
1. 编译错误修复
✅ 问题: 找不到符号 类 PadSetting
✅ 原因: GateABController中引用了错误的PadSetting路径
✅ 解决: 修正为使用 PadApiService.PadSetting
并在DeviceSelectDataManager中添加了getPadSetting()方法
2. 配置同步机制完善
根据用户需求和项目规范,实现了完整的每1分钟配置同步机制。
优化内容
1. DeviceSelectDataManager扩展
在 DeviceSelectDataManager.java
中新增了 getPadSetting()
方法:
/**
* 获取PadSetting配置对象
* @return PadSetting对象,如果解析失败返回null
*/
public PadSetting getPadSetting() {
try {
PadApiService.PadConfig padConfig = getPadConfig();
if (padConfig != null && padConfig.getExtension() != null) {
return padConfig.getExtension().getPadSetting();
}
} catch (Exception e) {
Log.e(TAG, "获取PadSetting失败: " + e.getMessage());
}
return null;
}
2. GateABController配置同步优化
定时同步机制
- 同步间隔: 每1分钟同步一次 (
SYNC_INTERVAL = 60000
) - 自动启动: 初始化时立即执行一次,然后每分钟定时执行
- 资源管理: 在release()时自动停止同步任务
配置变化检测
/**
* 检查配置是否发生变化
* @param oldConfig 旧配置
* @param newConfig 新配置
* @return true表示配置发生变化
*/
private boolean hasConfigurationChanged(GateABConfig oldConfig, GateABConfig newConfig) {
// 检查关键配置参数是否发生变化
return oldConfig.gateAbEnable != newConfig.gateAbEnable ||
oldConfig.gateOpenEnable != newConfig.gateOpenEnable ||
oldConfig.gateAbGpio != newConfig.gateAbGpio ||
// ... 其他关键参数
}
变化日志记录
/**
* 记录配置变化的详细信息
* @param oldConfig 旧配置
* @param newConfig 新配置
*/
private void logConfigurationChanges(GateABConfig oldConfig, GateABConfig newConfig) {
LogManager.logInfo(TAG, "=== 配置变化详情 ===");
if (oldConfig.gateAbEnable != newConfig.gateAbEnable) {
LogManager.logInfo(TAG, "AB门启用: " + oldConfig.gateAbEnable + " -> " + newConfig.gateAbEnable);
}
// ... 记录所有变化的参数
}
3. 日志记录规范遵循
根据项目规范 调试日志记录规范,增强了日志记录:
定时同步任务日志
private final Runnable configSyncRunnable = new Runnable() {
@Override
public void run() {
LogManager.logDebug(TAG, "== 开始定时配置同步 ==");
syncConfigFromPadSetting();
syncHandler.postDelayed(this, SYNC_INTERVAL);
LogManager.logDebug(TAG, "== 下次同步将在 " + (SYNC_INTERVAL / 1000) + " 秒后执行 ==");
}
};
配置同步过程日志
- 记录同步开始和完成
- 记录配置是否发生变化
- 详细记录每个变化的参数
- 记录异常情况和错误处理
4. 配置参数完整映射
确保所有uniapp state参数与Android PadSetting的完整映射:
配置参数 | 类型 | 说明 | 变化检测 |
---|---|---|---|
gateAbEnable | boolean | AB门禁开关 | ✅ |
gateOpenEnable | boolean | 核销结束开启门禁 | ✅ |
gateAbGpio | boolean | GPIO控制开关 | ✅ |
gateAbUdp | boolean | UDP控制开关 | ✅ |
gateEnterOpenEnable | boolean | 离场直接开门 | ✅ |
gateAbClose | boolean | AB门关闭状态 | ✅ |
livingControl | boolean | 活体检测开关 | ✅ |
gateAbCameraScore | float | 摄像头评分阈值 | ✅ |
gateACLoseTime | int | A门关闭时间 | ✅ |
... | ... | ... | ... |
同步机制流程
1. 初始化流程
GateABController.initialize()
├─ startConfigSync()
├─ 立即执行一次同步: syncConfigFromPadSetting()
└─ 启动定时任务: configSyncRunnable (每60秒)
2. 同步执行流程
定时任务触发
├─ 检查DeviceDataManager是否初始化
├─ 获取PadSetting配置
├─ 构建新的GateABConfig
├─ 与当前配置对比检查变化
├─ 更新当前配置
├─ 记录变化日志
└─ 安排下次同步
3. 资源释放流程
GateABController.release()
├─ stopConfigSync() - 停止定时同步
├─ 关闭线程池
└─ 释放其他资源
错误处理和容错
1. 空值检查
- DeviceDataManager未初始化时跳过同步
- PadSetting为null时使用默认配置
- 所有getter方法都有null检查
2. 异常处理
try {
// 配置同步逻辑
} catch (Exception e) {
LogManager.logError(TAG, "配置同步异常", e);
}
3. 网络异常处理
- 根据项目规范,网络异常时会记录错误日志
- 保持当前配置不变,等待下次同步重试
性能优化
1. 配置变化检测
- 只有配置真正发生变化时才记录详细日志
- 避免不必要的日志输出,提升性能
2. 内存管理
- 使用弱引用和单例模式避免内存泄漏
- 及时释放资源,防止内存占用过多
3. 线程管理
- 配置同步在主线程执行,避免线程安全问题
- 使用Handler处理定时任务,确保线程安全
调试建议
1. 查看同步日志
在LogCat中搜索以下标签:
GateABController: == 开始定时配置同步 ==
GateABController: 配置发生变化,已更新
GateABController: === 配置变化详情 ===
2. 验证同步间隔
查看日志中的时间间隔,确认每60秒执行一次:
GateABController: == 下次同步将在 60 秒后执行 ==
3. 检查配置数据
调用 getCurrentConfig()
方法获取当前配置状态,验证同步是否正确。
遵循的项目规范
1. 调试日志记录规范 ✅
- 关键操作添加调试日志
- 记录重要参数值和操作流程
- 便于问题排查和日志分析
2. 离场核销配置控制 ✅
- 支持
gate_enter_open_enable
配置控制 - 配置同步确保实时生效
3. 摄像头控制与错误处理规范 ✅
- 网络异常时正确处理,保持设备状态
4. 网络请求模型设计规范 ✅
- 保持配置数据的完整性
- 确保模块间通信的完整性
总结
✅ 编译错误已修复: PadSetting引用路径已修正
✅ 定时同步已实现: 每1分钟自动同步配置参数
✅ 变化检测已完善: 智能检测配置变化并记录详情
✅ 日志规范已遵循: 关键操作都有详细的调试日志
✅ 资源管理已优化: 自动启动和停止,防止内存泄漏
现在GateAB配置同步机制已经完全符合项目需求和规范要求,可以可靠地每1分钟同步一次配置参数,并及时响应配置变化。