Несмотря на то, что Kotlin Coroutines и Flow потихоньку перетягивают одеяло, всё-таки на многих больших проектах всё также используется RxJava. Если у вас сложное приложение, то задачи выходят за рамки обычного сценария: сходить в сеть и отобразить данные. И тут в дело вступают различные операторы RxJava — как раз то, почему Rx ещё долго не будет заменён на мой взгляд. В данной статье приведены вопросы от простого к сложному, которые могут ввести в ступор даже продвинутых пользователей RxJava.
Как создать Observable?
Несмотря на простоту, многих такой вопрос вводит в ступор и некоторые начинают говорить про Retrofit — то, что нужно подписаться и всё. На самом деле этот вопрос намного глубже и есть много разных способов. В ответе на данный вопрос нужно проговорить про такие методы как Observable.onCreate() – не забудьте рассказать про emitter, Observable.just(), fromCallable(), fromArray(), fromIterable(). Как видите методов много, каждый из них выполняет свою роль. Было бы неплохо, если вы расскажете про каждый из них и для чего они нужны на примерах.
Как обернуть обычный код в реактивный, так, чтобы можно было подписаться на Observable?
Сделать некую реактивную обёртку бывает удобно, когда вы работает с SDK которое возвращает данные с помощью callback-ов. Ну или работу с кастомной View тоже бывает удобно обернуть. Вопрос, как? Частично, ответы на этот вопрос есть в предыдущем вопросе, а именно можно привести пример работы метода Observable.create().
Объяснить работу оператора zip?
Многие знают что оператор позволяет объединить результат 2-ух Observable. А что если надо объединить 3? А 5? И второй вопрос по этой же теме, а что если один из Observable выполнится с ошибкой?
Что будет, если использовать оператор concat с оператором interval?
Многие уже знают, что оператор concat позволяет объединить события из 2-ух Observable. Этим он отличается от merge. Но не все смогут ответить, что произойдёт, если попытаться объединить два источника событий, один из которых бесконечный — как например interval.
Как реализовать подход offline first через операторы RxJava?
Типичная рабочая задачка — какие операторы можно тут использовать?
Чем отличается repeat от retry ?
Эти операторы помогут вам обработать ошибку или сделать повторный запрос.
Для чего нужен оператор compose?
Какой будет результат выполнения данного кода?
val publishSubject = PublishSubject.create<String>() publishSubject.onNext("event 1") val subscriber1 = publishSubject.subscribeBy( onNext = {println("subscriber 1 $it")} )
Если вы ответили, что результат будет subscriber 1 event 1— спешу вас разочаровать.
Все вопросы взяты из реальных практических кейсов, с которыми вы можете столкнуться в реальном проекте, так что, советую погуглить ответы или обратить внимание на продвинутый интенсив по Android-разработке, где вы не только обуздаете RxJava3, но и создадите вместе с наставником свой проект. Подробности тут. Оставляйте комментарии, а также не забудьте подписаться на наш канал.