我正在使用Mobile Vision中使用Google Barcode Scanner API的Android應用程序。應用程序的目的是檢測條形碼,然後根據與條形碼相關的數據採取一些行動。是否需要從UI線程調用CameraSource.stop()?
一旦檢測到第一個條形碼,我想停止相機源,以便檢測不應該繼續。當我嘗試在receiveDetections(Detector.Detections<Barcode> detections)
回調內執行cameraSource.stop()
時,線程被阻塞,logcat中有很多日誌輸出。由於此回調未在UI線程中執行,因此UI保持暢通。我嘗試在UI線程中執行cameraSource.stop()
,它工作正常。
我已經嘗試從UI線程調用cameraSource.start()
以及另一個線程,都工作正常。
現在我無法在文檔中找到與cameraSource的交互應該來自UI線程或工作線程的任何地方。我無法弄清楚爲什麼在從另一個線程調用時會失敗的邏輯。
感謝您的回覆,它使它更加清晰。我也看了一下'CameraSource'的源代碼[here](https://github.com/googlesamples/android-vision)。但是,如果不是阻塞線程,請求排隊到處理'receiveDetection()'的同一個線程,那麼它會更有意義嗎?一旦檢測到第一個條形碼,我真的不想使用標誌停止處理檢測到的條形碼。另外,如果從另一個線程調用stop(),檢測器將繼續不必要地檢測,直到實際執行stop()時間爲止。 – Nishkarsh
意圖是強制執行從CameraSource執行檢測的唯一線程。如果不像現在的代碼那樣加入線程,客戶就有可能多次在CameraSource上啓動和停止,有時會導致多個線程同時執行檢測。線程將盡快停止,因爲它在連接嘗試之前被標記爲非活動狀態。 – pm0733464