RxJava: subscribeOn vs observeOn
#разработка
Эти два оператора помогают использовать один из важнейших аспектов RxJava — планирование работы в нужном потоке. Кажется, что нельзя допустить ошибок в использовании этих операторов. Однако, есть несколько нюансов, которые необходимо знать.
Оператор observeOn меняет поток для всех операторов, которые будут идти после него. Многие ошибочно полагают, что его действие распространяется также на впереди стоящих операторов.
Оператор subscribeOn меняет поток, который используется Observable при подписке. Мы подписываемся в самом конце цепочки операторов, поэтому не имеет значения, где расположить этот оператор.
Что будет, если расположить в цепочке несколько операторов? Если с observeOn понятно, то что поток будет изменяться каждый раз, когда мы пишем его, то с subscribeOn не все так однозначно.
Распространенным мнением является то, что учитывается только первый оператор. Однако недавно мне попалась статья о том, что несколько операторов subscribeOn могут влиять на цепочку. Подробно и с примерами кода ее можно прочитать тут
На мой взгляд, использовать несколько операторов в одной цепочке — это чаще всего неочевидно и излишне. Но вопрос: «Что будет, если расположить подряд несколько операторов observeOn\ subscribeOn?» очень распространен в различных квестах, викторинах и на собеседованиях. Теперь вы точно знаете ответ на этот вопрос!
#разработка
Эти два оператора помогают использовать один из важнейших аспектов RxJava — планирование работы в нужном потоке. Кажется, что нельзя допустить ошибок в использовании этих операторов. Однако, есть несколько нюансов, которые необходимо знать.
Оператор observeOn меняет поток для всех операторов, которые будут идти после него. Многие ошибочно полагают, что его действие распространяется также на впереди стоящих операторов.
Оператор subscribeOn меняет поток, который используется Observable при подписке. Мы подписываемся в самом конце цепочки операторов, поэтому не имеет значения, где расположить этот оператор.
Что будет, если расположить в цепочке несколько операторов? Если с observeOn понятно, то что поток будет изменяться каждый раз, когда мы пишем его, то с subscribeOn не все так однозначно.
Распространенным мнением является то, что учитывается только первый оператор. Однако недавно мне попалась статья о том, что несколько операторов subscribeOn могут влиять на цепочку. Подробно и с примерами кода ее можно прочитать тут
На мой взгляд, использовать несколько операторов в одной цепочке — это чаще всего неочевидно и излишне. Но вопрос: «Что будет, если расположить подряд несколько операторов observeOn\ subscribeOn?» очень распространен в различных квестах, викторинах и на собеседованиях. Теперь вы точно знаете ответ на этот вопрос!