是否需要从UI线程调用CameraSource.stop()?

时间:2016-12-06 20:36:04

标签: android multithreading camera barcode google-vision

我正在开发一款使用Mobile Vision谷歌条码扫描器API的Android应用程序。 app的目的是检测条形码,然后根据与条形码相关的数据采取一些行动。

一旦检测到第一个条形码,我想停止相机源,以便不再继续检测。当我尝试在cameraSource.stop()回调内执行receiveDetections(Detector.Detections<Barcode> detections)时,线程被阻塞,并且logcat中有很多日志输出。由于此回调未在UI线程中执行,因此UI仍然未被阻止。我尝试在UI线程中执行cameraSource.stop(),它运行正常。

我试过从UI线程和另一个线程调用cameraSource.start(),两者都正常工作。

现在我在文档中的任何地方都找不到与cameraSource的交互应该来自UI线程或工作线程。我无法弄清楚当从另一个线程调用时为什么会失败的逻辑。

1 个答案:

答案 0 :(得分:1)

没有必要从UI线程调用CameraSource.stop(),但由于实现细节,不应该从执行receiveDetections的线程调用它。 <()代码等待此线程完成,因此以这种方式调用会造成死锁。