伟邦扫码串口单读取线程修复记录

记录日期:2026-08-26

项目仓库:/Users/liang/AndroidStudioProjects/CusumptionMachine

实施分支:simplify_menu_pay

问题与风险

伟邦扫码原实现由每个页面或弹框直接打开物理串口并创建阻塞读取线程。业务关闭时仅调用 interrupt()、关闭串口和清空回调,设备驱动不能保证阻塞中的 InputStream.read() 立即退出。下一次重新打开伟邦扫码后,旧线程可能继续与新线程竞争二维码数据,造成扫码器响声正常但当前页面未收到付款码。

原实现还把一次串口 read() 当成一条完整二维码。数据未以 CRLF 结束时会直接丢弃,无法处理半包、粘包以及 CRLF 分两次到达的情况。

修复方案

影响文件

自动验证

真机验收要求

交付边界