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

Does CameraSource.stop() require to be called from UI Thread?

我正在开发一个 android 应用程序,该应用程序使用来自 Mobile Vision 的 Google 条码扫描器 API。该应用程序的目的是检测条形码,然后根据与条形码相关的数据采取一些行动。

一旦检测到第一个条形码,我想停止摄像头源,这样检测就不会继续了。当我尝试在 receiveDetections(Detector.Detections<Barcode> detections) 回调中执行 cameraSource.stop() 时,线程被阻塞并且 logcat 中有很多日志输出。由于此回调未在 UI 线程中执行,因此 UI 保持畅通。我尝试在 UI 线程中执行 cameraSource.stop(),它工作正常。

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

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

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