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.

5.5 KiB

Ox485懒加载连接管理方案B实现说明

概述

成功实现了基于懒加载连接管理的Ox485串口通信优化方案。该方案采用以下核心策略:

  1. 首次使用时打开:第一次调用时才打开串口
  2. 保持连接状态:后续调用复用已打开的连接
  3. 定时检查机制:定期检查连接状态,异常时重连

核心特性

1. 懒加载连接管理

  • 延迟初始化:只有在实际需要通信时才建立串口连接
  • 连接复用:建立连接后保持状态,后续调用直接复用
  • 状态跟踪:精确跟踪连接状态(未连接、连接中、已连接)

2. 自动健康检查

  • 定时检查:每30秒检查一次连接健康状态
  • 超时检测:基于最后成功通信时间判断连接是否异常
  • 自动重连:检测到连接异常时自动重新建立连接

3. 智能重试机制

  • 重试限制:最大重试3次,避免无限循环
  • 延迟重试:重试间隔1秒,避免频繁重试
  • 状态重置:通信成功后重置重试计数器

4. 详细日志记录

  • 状态变化记录:详细记录连接建立、断开、重试等状态变化
  • 通信日志:记录数据发送和接收的详细信息
  • 错误跟踪:完整的错误信息和异常堆栈记录

技术实现

连接状态管理

private boolean isSerialPortOpen = false;     // 串口是否已打开
private boolean isConnecting = false;         // 是否正在连接中
private long lastSuccessTime = 0;            // 最后一次成功通信时间
private int currentRetryCount = 0;            // 当前重试次数

懒加载核心逻辑

private void ensureConnection(ConnectionCallback callback) {
    // 如果正在连接中,等待连接完成
    if (isConnecting) {
        // 等待逻辑
        return;
    }
    
    // 如果已经连接,直接返回
    if (isSerialPortOpen) {
        callback.onConnected();
        return;
    }
    
    // 需要建立新连接
    createConnection(callback);
}

定时健康检查

// 检查最后成功时间,超过阈值则重连
if (isSerialPortOpen && lastSuccessTime > 0 && 
    (currentTime - lastSuccessTime) > CONNECTION_CHECK_INTERVAL * 2) {
    // 重置连接状态并重连
    isSerialPortOpen = false;
    retryConnection();
}

使用方法

基本调用

// 获取实例并初始化
Ox485 ox485 = Ox485.getInstance();
ox485.initialize(context);
ox485.setGateCamera485OxOn(true);

// 使用(懒加载,首次会自动建立连接)
ox485.sendHex485ForPeopleNum(new Ox485.PeopleNumCallback() {
    @Override
    public void onSuccess(int peopleNum) {
        // 处理成功结果
    }
    
    @Override
    public void onError(String errorMessage) {
        // 处理错误
    }
});

异步调用

CompletableFuture<Integer> future = ox485.sendHex485ForPeopleNumAsync();
future.thenAccept(peopleNum -> {
    // 处理结果
}).exceptionally(throwable -> {
    // 处理异常
    return null;
});

优势分析

1. 性能优化

  • 减少资源消耗:只在需要时才开启串口连接
  • 连接复用:避免频繁开关串口的开销
  • 智能重连:自动处理连接异常,无需手动干预

2. 可靠性提升

  • 健康检查:定时检查确保连接状态正确
  • 重试机制:自动重试提高通信成功率
  • 状态管理:精确的状态跟踪避免状态混乱

3. 维护便利

  • 详细日志:完整的操作日志便于问题排查
  • 状态透明:清晰的状态信息便于监控
  • 配置灵活:可调节的超时、重试等参数

配置参数

// 连接检查间隔(30秒)
private static final long CONNECTION_CHECK_INTERVAL = 30000;

// 最大重试次数(3次)
private static final int MAX_RETRY_COUNT = 3;

// 重试延迟(1秒)
private static final long RETRY_DELAY = 1000;

// 通信超时(10秒)
private static final long TIMEOUT_485_MILLIS = 10000;

日志示例

15:45:22.734 Ox485                    D  Ox485模块初始化完成,采用懒加载连接管理模式
15:45:23.100 Ox485                    D  启动485连接定时检查,检查间隔: 30秒
15:45:25.200 Ox485                    D  开始通过485获取摄像头人数(懒加载模式)
15:45:25.201 Ox485                    D  首次使用或连接已断开,建立485连接
15:45:25.205 Ox485                    D  开始建立485连接 - 路径: /dev/ttyS6, 波特率: 9600
15:45:25.210 Ox485                    D  485串口打开结果: true
15:45:25.211 Ox485                    D  485连接建立成功,进入懒加载复用模式
15:45:25.215 Ox485                    D  发送485人数查询命令: 0F030001000294E5
15:45:25.230 Ox485                    D  接收到数据: 0f03040001000185f3, 字节数组: [15, 3, 4, 0, 1, 0, 1, -123, -13]
15:45:25.231 Ox485                    D  解析485人数成功: 1
15:45:25.232 Ox485                    D  485获取人数成功: 1

结论

该懒加载连接管理方案成功实现了以下目标:

  1. 首次使用时打开:通过ensureConnection()方法实现懒加载
  2. 保持连接状态:连接建立后复用,避免重复开关
  3. 定时检查机制:30秒间隔的健康检查和自动重连

该方案在保证通信可靠性的同时,显著提升了资源利用效率和系统稳定性。根据项目要求,已严格遵循了日志格式偏好和UDP状态缓存重置的经验教训。