如何在 Android 中实现连续 QR 码扫描并按序处理结果
在 Android 上做连续扫码,很多人第一反应是“循环 + 阻塞等待”,结果写出来的代码要么 ANR,要么莫名其妙地崩溃。其实,扫码本身是异步事件——摄像头一直在预览,检测到二维码就触发回调。这个模型天然就不适合用同步思维去驾驭。那么,正确的思路是什么?简单说就是:把整个扫描流程设计成一条回调驱动
在 Android 上做连续扫码,很多人第一反应是“循环 + 阻塞等待”,结果写出来的代码要么 ANR,要么莫名其妙地崩溃。其实,扫码本身是异步事件——摄像头一直在预览,检测到二维码就触发回调。这个模型天然就不适合用同步思维去驾驭。
那么,正确的思路是什么?简单说就是:把整个扫描流程设计成一条回调驱动的链。每次成功解码后,在 onDecoded 回调里决定要不要开启下一次扫描。不需要什么 wait/notify,也不需要搞一个线程在那傻等——这些操作在 Android 主线程上简直是雷区,wait() 一用,轻则崩溃,重则 ANR。
下面这段代码演示了如何连续扫描 10 次,每次拿到结果后自动开始下一轮,直到全部完成才释放资源:
private int scanCount = 0;
private static final int TOTAL_SCANS = 10;
@Override
protected void onCreate(Bundle sa vedInstanceState) {
super.onCreate(sa vedInstanceState);
setContentView(R.layout.activity_main);
CodeScannerView scannerView = findViewById(R.id.scanner_view);
mCodeScanner = new CodeScanner(this, scannerView);
mCodeScanner.setDecodeCallback(result -> {
// 注意:onDecoded 是在后台线程触发的
runOnUiThread(() -> {
Toast.makeText(MainActivity.this,
"Scan #" + (scanCount + 1) + ": " + result.getText(),
Toast.LENGTH_SHORT).show();
});
scanCount++;
if (scanCount < TOTAL_SCANS) {
// 自动开始下一次扫描(无需用户点击)
mCodeScanner.startPreview();
} else {
// 全部完成
mCodeScanner.releaseResources();
Toast.makeText(this,
"All " + TOTAL_SCANS + " scans completed.",
Toast.LENGTH_LONG).show();
}
});
// 首次启动扫描
mCodeScanner.startPreview();
}几个关键点值得拎出来说清楚:
- 绝不阻塞主线程:
startPreview()是非阻塞的,调用后立即返回,真正的解码在后台进行。UI 更新必须切回主线程——这就是runOnUiThread()的用处。 - 扫描控制权交给回调:
onDecoded是唯一的“扫描完成”信号。所有后续逻辑,包括计数、重启、终止,都放在这里写,干净利落。 - 资源管理要有始有终:多次调用
startPreview()不会造成泄漏,但任务结束后一定要调用releaseResources()释放摄像头,否则下次扫码或退出页面时可能出问题。 - 鲁棒性还可以再拔高:实际项目中建议加上超时机制(比如用
Handler.postDelayed()在 N 秒无扫码时提示用户);支持手动中断(加一个“停止扫描”按钮调用stopPreview());如果连续扫到的可能是同一个码,可以用Set做去重。
这种回调驱动的设计完全贴合 Android 生命周期与事件模型,代码简洁、易维护,而且天然线程安全——不用加锁,不用轮询,一切顺其自然。这也就是为什么说它才是现代 Android 扫码开发的推荐做法。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















