Я также столкнулся с той же проблемой сегодня, поэтому обнаружил, что есть один отсутствующий параметр, который является Executor
, который нам нужно передать, в противном случае возникает такая же ошибка компиляции.
Как и при работе с AsyncTasks
в прошлом я осознавал, что для выполнения задач в нескольких потоках в AsyncTasks
нам нужно использовать его статический метод executeOnExecutor()
, который принимает Executor
в качестве параметра, поэтому я использовал тот же параметр, т.е. я использовал AsyncTask.THREAD_POOL_EXECUTOR
как первый параметр в методе setAnalyser()
. И это работает как шарм! После ввода этого параметра в качестве первого параметра вам нужно внести некоторые незначительные изменения в свой предыдущий код.
Примерно так:
imageAnalysis.setAnalyzer(AsyncTask.THREAD_POOL_EXECUTOR,
object : ImageAnalysis.Analyzer { // changes to be done in this line
override fun analyze(imageProxy: ImageProxy, rotationDegrees: Int) {
val image = FirebaseVisionImage.fromMediaImage(
imageProxy.image!!, getFirebaseRotation(rotationDegrees)
)
if (processingBarcode.get() ||
!lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) {
return
}
..................
.............
.......BLA BLA BLA
}
Попробуйте и скажите мне, работает ли этот подход с вашим вариантом использования.
РЕДАКТИРОВАТЬ
Если вам не нравится AsyncTask
, я нашел альтернативу для получения экземпляра Executor
без использования AsyncTask.THREAD_POOL_EXECUTOR
.
. Вы можете использоватьExecutors.newFixedThreadPool(n)
, чтобы получить Executor
экземпляр. Здесь n обозначает количество потоков, которые вы хотите создать в пуле потоков. Это зависит от вашего варианта использования.
Скажите, сработало ли это для вас.