优卡特扫码串口单读取线程修复记录

记录日期:2026-08-26

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

实施分支:simplify_menu_pay

问题现象

菜单消费账单核对弹框关闭后再次打开,扫码器可能连续响多次,但前几次没有发起支付。现场日志确认三次扫码分别由三个不同线程读取,前两个线程属于已经关闭业务回调、但仍阻塞在串口 read() 的旧实例;数据被旧线程消费后直接丢弃,第三次才由当前账单会话处理。

根因

优卡特扫码器原实现中,每个页面或弹框都会重新打开 /dev/ttyS3 并创建读取线程。关闭时虽然调用了 interrupt() 和串口关闭,但设备驱动无法保证立即唤醒阻塞中的 InputStream.read()。旧线程可能继续等待并与新线程竞争后续扫码数据。

修复方案

影响文件

自动验证

真机验收要求

交付边界