2016-05-28 6 views
0

Кто-нибудь знает оператора в примере rxlava или примера, как вернуть результат наблюдаемого в поток, в котором он был вызван? На самом деле это еще один кеш на Android)) Приложение разделено на несколько слоев:Оператор RxJava, который возвращает другой Наблюдаемый результат в потоке подписчика

UI | Уровень домена (средний) (кэширование, некоторая логика приложения) | Уровень данных (диск и сеть)

Проблема в том, что я не знаю, из какого одного наблюдаемого потока вызывается из разных слоев. Поэтому мне нужно сделать избыточное переключение на основную нить Android или другую Schedullers.computation() или Schedullers.io() нить.

Например, слой пользовательского интерфейса подписывается на наблюдаемый из основного потока пользовательского интерфейса (или любого другого, например, вычисление) на доменный уровень, и если данные кэширования отображаются в значениях возврата немедленно. Но если ни один из кэшированных доменов уровня ценности не присоединяется к слою данных в io-потоке, если данные на диске или в потоке вычислений, если мне нужно сгенерировать некоторые данные и вернуться к потоку, в котором подписались предыдущий уровень.

Конечно, я должен учитывать одновременный доступ к данным.

Заранее благодарен!

UPD: Я просто понимаю, что мне нужно удалить только .observeOn(AndroidSchedulers.mainThread()) на любой наблюдаемый I retun fron Domain layer. Мне нужно всегда добавлять окончательный .observeOn(AndroidSchedulers.mainThread()) по подписке или в местах, где я взаимодействую с пользовательским интерфейсом, но не на любом уровне домена Observable.

ответ

0

Я не опытный разработчик Android, но насколько я знаю, каждая нить может иметь связанный с ней номер Looper, а также Handler. Библиотека RxAndroid позволит вам создать Scheduler из обработчика, и вы можете просто observeOn в потоке, связанном с петлером.

+0

Благодарим за помощь. Проблема заключалась в моем непонимании с обработкой потоков rxjava. См. Мое обновление. Но ваше решение я не буду рекомендовать как источник непредсказуемых ошибок по моему мнению. – Dmytro

+0

Но на самом деле была найдена аналогичная проблема на RxAndroid rep https://github.com/ReactiveX/RxAndroid/pull/247, и никто не говорит, что он может создавать любые проблемы. Но currentThread() все еще не в версии для версии – Dmytro