我正在开发一款使用Mobile Vision谷歌条码扫描器API的Android应用程序。 app的目的是检测条形码,然后根据与条形码相关的数据采取一些行动。
一旦检测到第一个条形码,我想停止相机源,以便不再继续检测。当我尝试在cameraSource.stop()
回调内执行receiveDetections(Detector.Detections<Barcode> detections)
时,线程被阻塞,并且logcat中有很多日志输出。由于此回调未在UI线程中执行,因此UI仍然未被阻止。我尝试在UI线程中执行cameraSource.stop()
,它运行正常。
我试过从UI线程和另一个线程调用cameraSource.start()
,两者都正常工作。
现在我在文档中的任何地方都找不到与cameraSource的交互应该来自UI线程或工作线程。我无法弄清楚当从另一个线程调用时为什么会失败的逻辑。
答案 0 :(得分:1)
没有必要从UI线程调用CameraSource.stop(),但由于实现细节,不应该从执行receiveDetections的线程调用它。 <()代码等待此线程完成,因此以这种方式调用会造成死锁。