oxFaceAndroid
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

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分钟同步一次配置参数,并及时响应配置变化。