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() 代码等待此线程完成,因此以这种方式调用它会造成死锁。
我正在开发一个 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() 代码等待此线程完成,因此以这种方式调用它会造成死锁。