Android: RxJava. Горячие и холодные Observable. ConnectableObservable

RxJS — это библиотека для реактивного программирования с использованием Observables, чтобы упростить создание асинхронного или основанного на обратном вызове кода.

Coroutines Kotlin VS RxJava в асинхронном коде

Думаю, для тех, кто не знаком с Kotlin, стоит сказать пару слов о нем и корутинах в частности. Об актуальности изучения Kotlin говорит то, что в мае 2017 года компания Google сделала его официальным языком разработки Android.

Проекты, стартующие в нашей компании, мы пишем на Kotlin, поэтому изучаем существующие возможности и следим за выходом новых. Когда создатели языка анонсировали корутины как новый инструмент асинхронного программирования, стало интересно протестировать их в боевых условиях. Судя по описанию возможностей, они как раз подходят для решения наших задач и отличаются в лучшую сторону от уже существующих решений.

Итак, для чего нужны корутины? Если требуется скачать что-то из сети, извлечь данные из базы данных или просто выполнить долгие вычисления и при этом не заблокировать интерфейс пользователю, можно использовать корутины.

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

Читайте также:  Разблокировать загрузчик HTC U Ultra

Что можно наблюдать?

По сути, Observable — это ленивый Push-набор из нескольких значений. Они обеспечивают непрерывный канал связи, в котором с течением времени могут передаваться несколько значений данных.

Angular широко использует Observables как в HTTP-сервисе, так и в системе событий.

RxJS предлагает ряд функций, которые можно использовать для создания observables.

1. Использование функции of

2. Использование функции from

передавая обещание от функции

передавая массив чисел из функции

3. Использование функции fromEvent

Передача события click в функцию fromEvent

4. Использование функции interval

Передача таймера в функцию интервала

Вот некоторые из распространенных способов создания Observables в RxJS.

Системные нарушения, приводящие к гиперестезии

Обычно первые ее признаки появляются при ежедневной чистке зубов. Через некоторое время после гигиенической процедуры симптоматика проходит, но это вовсе не означает, что патологический процесс отступил.

Если при температурных перепадах появляется резкая боль, она не всегда говорит о проблемах стоматологического характера:

  • Гастрит. Кислоты, выбрасываемые из желудочно-кишечного тракта, едкие и негативно влияют как на твердые, так и на мягкие ткани.
  • Эндокринологические нарушения, сюда же относится диабет. В организме наблюдается дефицит жизненно важных витаминов и минеральных веществ.
  • Возрастные особенности.
  • Дисбаланс гормонов. Это происходит при приеме определенных лекарственных средств или во время вынашивания ребенка.
  • Стрессовые ситуации, нервные потрясения, депрессия.
  • Снижение иммунитета и сопутствующие воспалительные, инфекционные процессы.

Android

  • принципы SOLID и чистая архитектура;
  • активити и методы жизненного цикла, onSaveInstanceState/onRestoreInstanceState;
  • фрагмент и методы жизненного цикла;
  • контекст;
  • сервисы;
  • Broadcast Receiver;
  • интенты;
  • Handler/Looper;
  • AsyncTask;
  • что такое процесс;
  • Inter Process Communication;
  • сериализация и парселизация;
  • view: жизненный цикл, кастомные view;
  • Flavours/Builds;
  • архитектура MVP и MVVM;
  • многомодульность;
  • что такое OkHttp и зачем он нужен;
  • RxJava:
    • Hot и Cold observables;
    • разница между map и flatMap;
    • как создавать Observable;
    • разница между RxJava 1 и RxJava 2;
    • что такое BackPressure.
  • Dagger 2:
    • аннотация Named;
    • скоупы в Dagger 2.
Читайте также:  Использовано приложение Android System: что это значит?

Проверка навыков программирования происходит нечасто. Обычно кандидату дают какой-либо сайт, где можно писать псевдокод прямо в окне браузера. Его видят обе стороны собеседования. Часто дают небольшие задачи по сортировке элементов в списке или получению того или иного элемента. Вот что нужно, чтобы подготовиться к таким задачам:

  • тренироваться в ветвлениях и условиях;
  • знать, что такое предикат;
  • знать основные методы пакетов Colleсtions, Array, которые работают с преобразованием коллекций и сортировкой;
  • решать задачи на алгоритмы и сортировки.

Все задачи обычно очень разные, но при этом достаточно типовые. Для приобретения навыка их решения можно просто тренироваться на одном из множества сайтов, которые предлагают задачи к решению и содержат ответы. По одной задаче в день в течение месяца будет достаточно, чтобы освоиться.

Лямбда-выражения

При работе с ReactiveX каждый раз приходится создавать новые объекты и тут же переопределять какие-то методы. В результате возникает нагромождение малоиспользуемых объектов и такой код плохо читается.

В Java 8 появились так называемые лямбда-выражения, которые очень похожи на функции в С-подобных языках. Не так давно они стали доступны и в Android (с обратной совместимостью API до версии 23), теперь можно сделать код более читаемым и лаконичным.

observableHeavyOp=(v->(prepareList())) .subscribeOn(()) .observeOn(()); … (userList -> {(false);(userList);} );