Заменяйте внешне вызываемые обратные вызовы с помощью RxJava

У меня есть приложение, использующее Google Mobile Vision, где метод обнаружения детектора detect(Frame frame) вызывается извне с помощью фреймворка. В этом методе я вызываю обратные вызовы хостинговой Activity :

 override fun detect(frame: Frame?): SparseArray<Barcode> { ... activity.doSomethingOn(theDetections) } 

Из-за реактивной природы логики я хотел бы представить ReactiveX как можно больше мест и заменить обратные вызовы на создание потока. Это вообще возможно? Следующий не работает:

 val detections: Flowable<SparseArray<Barcode>> = SparseArray<Barcode>() .toSingle() .toFlowable() override fun detect(frame: Frame?): SparseArray<Barcode> { ... detections.concatWith(detections.toSingle().toFlowable()) } 

и в деятельности это вообще не называется:

 detector.detections .subscribeOn(AndroidSchedulers.mainThread()) .forEach { info(detections.size) } 

Это тоже не работает:

 val detections: Flowable<SparseArray<Barcode>> = SparseArray<Barcode>() .toSingle() .toFlowable() fun lastDetections(): Flowable<SparseArray<Barcode>> = detections override fun detect(frame: Frame?): SparseArray<Barcode> { ... detections.concatWith(detections.toSingle().toFlowable()) lastDetections() } 

и в деятельности:

 detector.lastDetections() .subscribeOn(AndroidSchedulers.mainThread()) .forEach { info(detections.size) } 

Что я делаю неправильно? Возможна ли такая замена вообще? Означает ли это, прежде всего, смысл? (Я бы сказал «да»).