Как стать автором
Обновить

Почему следует использовать RxJava в Android – краткое введение в RxJava

Блог компании Издательский дом «Питер»ПрограммированиеJavaРазработка под AndroidПрофессиональная литература
Перевод
Всего голосов 17: ↑16 и ↓1+15
Просмотры30K
Комментарии 16

Комментарии 16

Имхо, в примерах стоит использовать лямбды с типами. Вместо


return new Action1<Pair<Settings, List<Message>>>() {
        @Override
        public void call(Pair<Settings, List<Message>> pair) {
            System.out.println("Received settings" + pair.first);
        }
    };

писать


return ((Pair<Settings, List<Message>>) pair) -> {
            System.out.println("Received settings" + pair.first);
        }
.doOnNext{ System.out.println(«Received settings» + it.first) }
kotlin forever

Введение же, важно указать, какие там типы. Так-то можно и
.doOnNext(pair -> System.out.println("Received settings" + pair.first))

Да, без лямбд Java код в функциональном стиле вообще нечитаем. Для Андроида можно использовать retrolambda.
Уже без retrolambda можно. Просто в gradle поставить jackOptions:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"

    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }
    ...
}

И лишиться бесплатного Instant Run? Кстати, а Mokito уже как-нибудь завели с Jack?
Сколько можно этих кратких введений? Каждый месяц по паре статей на протяжении года. Думаю все кому надо уже «ввелись», и можно вещать о продвинутом использовании либы.
Уже год пишу под Андроид с помощью этой либы, а все одни введения. Когда уже напишут что-то, чего я не знаю? :))
Ну вот видите, Орейли вняли!

Ждите, будем стараться заполучить и предоставить в классном переводе
не холивара ради… мне одному кажется что все введения в RxJava стараются придумать такие задачи, чтобы обосновать необходимость использовать RxJava вместо стандартных механизмов?

мне очень сложно представить реальную пользу от получения всей информации из примера в одном месте (в одной Activity) и одновременно

возможно было бы более уместно рассказывать о стандартных задачах и насколько легче они решаются с RxJava
Есть приложение, работающее по 3g, часть данных меняется не чаще раза в сутки, эти данные кешируются при первом запуске за сутки в qlite базу. Другая часть данных нуждается в проверке на момент использования, соответственно при использовании и тех и других имеем простыню из двух asyncTask то что имеем. Добавим сюда транспортировку данных из асинктаск-а в основной поток (класс не вложен в класс активити) и получим
пользу от получения всей информации из примера в одном месте (в одной Activity)


На самом деле, конечно, случаются такие ситуации не на каждом шагу, их можно решить и стандартными средствами, но если можно сделать проще и короче, то почему нет?

Пригляжусь к RxJava повнимательнее.
то что Вы описали делается через один сервис (для синхронизации раз в день) и один AsyncTaskLoader<нужный тип>. Именно использование AsyncTask для этой задачи и усложняет Вам жизнь IMO.

Ваш пример из практики, я полагаю. Однако не совсем понятно, как RxJava сделает жизнь проще в Вашем случае?

P. S. я интересуюсь с целью понять в чем преимущество RxJava на практике. меньше кода?
Да, пример из текущего проекта, и работает всё ровно, но нет легкости в структуре. Хотя, может просто нужно больше опыта…

И я понятия не имею, сделает RxJava жизнь проще или нет) Просто альтернативная моей реализация может оказаться компактнее/легче в расширении/понимании или ещё в чем-то… а может и не оказаться — сам то я ещё не пробовал, а посему и написал, что пригляжусь к реактивным библиотекам.
Да много преимуществ. Как минимум Api поприятнее, чем у того же Loader'a, хоть это и не замена ему.

Меньше кода (не во вред читаемости), простая и удобная обработка ошибок.
Удобная работа с сетью, базой, отсутствие тонны вложенных коллбеков.
Возможность красиво распределять операции по различным потокам с разными приоритетами.

Комбинирование операций над данными (как одновременно, так и последовательно). Это, в принципе, основная фишка. Бывают случаи, что просто не представляю как соорудить что-то адекватное без Rx, чтоб без кучи каких-то тредов, атомиков, мютексов и кэшей.
> В таких случаях рекомендую использовать JavaTuples.

Мне кажется, что это одно из великих зол, изобретённых в мире java. Поддерживать добро, читая по коду разбросанные a.getValue1(), b.getValue2() и т.д. по мне так доставляет неимоверной боли и неочевидных багов.
Такое активное желание сообщества «Объяснить зачем это всем обязательно нужно» — настораживает.

3-th part библиотечек — полный github — RXJava — ОДНА ИЗ — кому надо — найдут/изучат/заюзают.
Java — интерпрайзы на продакшнах — досих пор у людей без RX-ов… и котлинов.

Расскажите про «несовершенсто java» — серверным разработчикам — оставьте уже Андроид в покое.

Увы никакие RX-ы, лямбды, и ретро-лябды — не уберегут вас от утечек в инер классах, и тп-
как ни старайтесь — «много писать (в тч с WeakReferences) все равно придется».

Да и AOSP вроде как пока не Warton-у принадлежит и даже не Square.
… мода — приходит и уходит…
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.