Я начал изучать RxJava и RxAndroid. Я хотел бы заменить шаблон наблюдателя на RxJava. Шаблон наблюдателя похож на класс Android LocationManager, который имеет методы регистрации и отмены регистрации. «Наблюдаемый» класс (не означает rx.Observable) работает в своем потоке (HandlerThread) и владеет картой слушателя и его объектом Handler, и каждый из слушателей вызывается в его потоке (через Handler). Понятно, я думаю. Итак, вопрос в том, как реализовать его с помощью RxJava? Имеет ли это смысл? Я читал о PublishSubject и Subscriber, но я не знаю, как запустить мой Observable в его потоке. Я не хочу использовать метод subscribeOn, потому что Subscriber не создает Observable, а только подписывается на получение уведомлений в своем потоке. Спасибо за любые предложения.Замените шаблон наблюдателя на RxJava на Android
ответ
Ваш общий подход является хорошим. Позвольте мне изложить несколько аспектов для вас.
Предположим, что ваш наблюдаемый класс несет ответственность за значение, которое изменяется с течением времени. Раньше вы регистрировали бы наблюдателя, и наблюдаемый объект предупреждал бы каждого наблюдателя, когда его значение изменилось. Предположим, вы наблюдаете изменения цвета. (Внимание:. Непроверенный код следующим образом я использовал подобный код для адаптации шаблона Observer в RxJava.)
PublishSubject<Color> ps1 = new PublishSubject<>(); // your observable class
Observable<Color> observable = ps1.observeOn(Schedulers.newThread());
...
// handler in another thread
Subscription sub = observable.subscribeOn(myThreadScheduler).subscribe(myHandler);
Теперь ваш обработчик будет вызван на резьбе указанного myThreadScheduler
. Вы также можете отменить свои наблюдения на sub.unsubscribe()
.
Хорошо, но как насчет нескольких наблюдателей? My Observable - одноэлементный, так что есть только один рабочий поток. Я полагаю, что наблюдатели не должны вызывать метод subscribeOn. Я прав? – piotrek00
Каждый наблюдатель выполнит эту последнюю строку. Что 'subscribeOn()' does выполняет передачу данных между потоками. –
- 1. Шаблон наблюдателя в Android
- 2. Шаблон наблюдателя на всех сайтах
- 3. Замените слушателей RxJava
- 4. RxJava андроид - делает блок наблюдателя
- 5. Как заменить шаблон EventBus на презентаторы RxJava?
- 6. интерфейса шаблон наблюдателя: нулевая ссылка на объект
- 7. Шаблон наблюдателя, не работающий на Ruby
- 8. Замените на MenuCompat.setShowAsAction() на Android
- 9. Образцовый шаблон наблюдателя наблюдателя с обработчиком
- 10. MVC против наблюдателя шаблон
- 11. Шаблон наблюдателя - варианты
- 12. Обработка подписки на RxJava на Android элегантно?
- 13. SI + шаблон наблюдателя
- 14. замените конкретный шаблон строки на html
- 15. Шаблон наблюдателя и делегаты
- 16. Вложенный шаблон наблюдателя
- 17. Дизайн кода: шаблон наблюдателя?
- 18. Шаблон поворота и наблюдателя
- 19. Многопоточный шаблон наблюдателя
- 20. Непосредственно связанный шаблон наблюдателя
- 21. Шаблон наблюдателя - состояние гонки
- 22. шаблон наблюдателя против MVC
- 23. Android Rxjava подписаться на переменные изменения
- 24. Шаблон наблюдателя в wxPython
- 25. Шаблон наблюдателя в C++
- 26. Замените адресную книгу на Android
- 27. Java альтернативный шаблон наблюдателя
- 28. Шаблон наблюдателя для JTextField?
- 29. Шаблон наблюдателя в C#
- 30. Общий шаблон наблюдателя
Привет, RxJava реализует шаблон наблюдателя для вас. Вы просто создаете потоки данных, а затем подписываетесь. Вы можете создавать разные наблюдатели через операторов. RxJava не сулит о потоковом использовании. Фактически RxJava по умолчанию имеет однопоточность. Пожалуйста, взгляните на эту книгу «Реактивное программирование с помощью RxJava» (http://shop.oreilly.com/product/0636920042228.do). Он проведет вас через все проявления RxJava с примерами Android. –