background preloader

Все

Facebook Twitter

RxAndroid Tutorial. If you're new here, you may want to subscribe to my RSS feed or follow me on Twitter. Thanks for visiting! They say you should develop a proactive mindset in life, not a reactive one. That does not apply to Android programming, however! :] Reactive programming is not just another API. It’s a whole new paradigm and a very useful one.

Don’t be scared — I’ll bet the basic concept of reactive programming is known to you even if you are not aware of it yet. :] Note: This tutorial requires good knowledge of Android and Java. In this RxAndroid Tutorial you will learn how to do the following: What Reactive Programming isWhat an observable isTurn asynchronous events like button clicks and text field context changes into observablesTransform observable itemsFilter observable itemsSpecify the thread on which code should be executedCombine several observables into one I hope you like cheese — because you’re going to build a cheese-finding app as you learn the concepts above! Getting Started. RxJava. Убираем магию. Я долго боялся использовать RxJava в production. Её назначение и принцип работы оставались для меня загадкой. Чтение исходного кода не добавляло ясности, а статьи только путали.

Под катом попытка ответить на вопросы: «Какие задачи эта технология решает лучше аналогов?» И «Как это работает?» С помощью аналогий с классической Java и простых метафор. RxJava отлично заменяет Streams API из Java 8 на более ранних версиях Java. Interface Iterator<T> { T next(); boolean hasNext(); } За интерфейсом скрывается какой-нибудь источник данных, причём совершенно не важно, какой. Next — получить следующий элементhasNext — узнать, есть ли ещё данные в источнике У этого паттерна есть одна особенность: потребитель запрашивает данные и ждёт («зависает»), пока источник не выдаст их.

Проведём небольшой рефакторинг. interface Iterator<T> { T getNext(); boolean isComplete(); } Думаю, вы уже поняли, к чему я. Interface Emitter<T> { void onNext(T value); void onComplete(); void onError(Throwable error); } RxJava: Untitled. Animating objects in Android is seemingly easy, especially using ViewPropertyAnimator which provides out-of-the-box solutions and easy-to-construct view property animations. Add RxJava to the mix and you have a very powerful tool for chaining animations with other animations, random actions, etc. Note before we start: The purpose of this post is to show you how to combine RxJava features with animations on Android to create a great user interface without a lot of nested code.

The basic knowledge of RxJava is necessary for a complete understanding of the process, but even without it you should be able to grasp the power and flexibility of RxJava constructs and understand how they can be used effectively. Want to see how we use this in our app? Check out PDF Viewer. The basics of animating view properties Throughout the article, we'll be using ViewPropertyAnimatorCompat retrieved by calling ViewCompat.animate(targetView). Let's see how we could animate a simple view by using it. Limitations. Укрощаем асинхронные процессы в Android с RxJava. Опыт Яндекса / Блог компании Яндекс. Всем привет, меня зовут Алексей Агапитов и сегодня я хочу рассказать, как с помощью такой библиотеки как RxJava можно легко обрабатывать множество асинхронных процессов в вашем Android приложении. Мы разберём, как создавать свои холодные и горячие последовательности, обратим внимание на некоторые нюансы при использовании RxJava, а также рассмотрим насколько мощными инструментами являются предоставляемые данной библиотекой операторы.

Рассказывать обо всём я буду на примере приложения Яндекс.Недвижимость и его главного экрана с картой. Для начала посмотрим на экран и разберёмся, что на нём происходит и что нам предстоит реализовать. Гифка, 13 мб Прежде всего возникает взаимодействие с картой: человек может двигать карту и на ней будут появляться точки с объявлениями, подходящими под его фильтры. Точки могут быть единичными объявлениями, новостройками, домами и кластерами, объединяющими множество объявлений. Сравнение RxJava с традиционным Android подходом Реализация Обращение к API. Принципы реактивного программирования на примере простого RSS-агрегатора с использованием ReactiveX для Python. Несколько примеров практического использования RxJava. RxJava — это реализация ReactiveX для Java — библиотеки для асинхронной обработки потоков данных.

Паттерн observable на стероидах, как они сами пишут. В интернете, в том числе на Хабре, есть много «введений в RxJava». Я хочу привести несколько примеров реальных задач. Они не очень сложные, но возможно кто-то увидит какие-то сходства со своими и задумается. Собственно, задачи: 1. 2. 3. 1. Предположим, есть некоторый протокол обмена сообщениями. Public String send(String command) { try { if (! Детали реализации я не описываю, но вкратце: connect() создает java.net.Socket и подключается к серверу, sendBytes() пишет в output-поток сокета, readAnswer() читает из input-потока сокета. Проблемы этого кода: блокирующие запись/чтение и неудобная обработка ошибок — не понятно, что делать с исключением: то ли наверх пробрасывать, то ли тут что-то сделать (рекурсивно повторить отправку?). Применение: connection.send("echo 123") .subscribe( answer -> { }, throwable -> { } ); Улучшим этот код. 2. 3. Разбираемся с многопоточностью в RxJava / Блог компании Rambler&Co.

Когда описывают преимущества RxJava, всегда упоминают об удобстве организации работы многопоточного приложения средствами RxJava. То, как использовать операторы subscribeOn и observeOn, можно прочитать практически в каждой статье, посвященной основам RxJava. Например, здесь хорошо описаны случаи, когда использовать методы subscribeOn и когда observeOn.

Однако, на практике часто приходится сталкиваться с проблемами, для которых нужно более глубокое понимание того, что именно делают методы subscribeOn и observeOn. В этой статье я хотел бы рассмотреть ряд вопросов, которые иногда возникают при использовании этих операторов. Сначала для проверки работы смены потоков я использовал следующий код: Скрытый текст Проверим как работает этот код без всяких преобразований: testSchedulersTemplate(stringObservable -> stringObservable); Результат: Inside observable: main Before transform: main After transform: main Inside doOnNext: main In onNext: main In onComplete: main 1. Проверяем: Никаких сюрпризов. Как приручить реактивное программирование. Основы реактивного программирования под Android на практическом примере. 1.

Введение в реактивное программирование Разрабатывая сложное приложение под Android со множеством сетевых соединений, взаимодействием с пользователем и анимацией — означает писать код, который полон вложенных обратных вызовов. И по мере развития проекта такой код становится не только громоздким и трудно понимаемым, но также сложным в развитии, поддержке и подвержен множеством трудноуловимым ошибкам. ReactiveX или функциональное реактивное программирование предлагает альтернативный подход, который позволяет значительно сократить код приложения и создавать изящные понимаемые приложения для управления асинхронными задачами и событиями. RxJava — реализация ReactiveX с открытым исходным кодом на Java.

RxAndroid — расширение к RxJava, которое позволяет планировщику запускать код в основном и дополнительных потоках Android приложения и обеспечивает передачу результатов из созданных дополнительных потоках в основное для агрегации и взаимодействия с интерфейсом пользователя. 2. 3. 4. 5. 6. 7. Замечания о реактивном программировании. Технологический ландшафт / Хабрахабр. Почему следует использовать RxJava в Android – краткое введение в RxJava. Здравствуйте все. Мы продолжаем знакомить вас с нашим издательским поиском, и хотели прозондировать общественное мнение на тему RxJava. В ближайшее время собираемся опубликовать более общий материал по реактивному программированию, которое нас также интересует не первый год, а сегодня предлагаем почитать о применении RxJava в Android, так как именно на этой платформе особенно важна динамичность и быстрота реагирования.

Добро пожаловать под кат В большинстве приложений Android мы реагируем на действия пользователя (щелчки, смахивание, т.д.), а тем временем в фоновом режиме идет какая-то другая работа (сетевая). Оркестровка всех этих процессов – сложная задача, любой код рискует быстро превратиться в бесформенную кашу. Например, не так просто послать по сети запрос к базе данных, а после его выполнения сразу начать одновременно выбирать и пользовательские сообщения, и настройки, а после завершения всей этой работы вывести приветственное сообщение. Почему? Вернемся к нашему примеру: Пример. Основы реактивного программирования под Android на практическом примере.

Используем RxJava и Retrofit на Android, учитывая поворот экрана. Решил я однажды таки попробовать дико популярный нынче Rx. А заодно и Retrofit. И посмотреть, как с их помощью реализовать стандартную задачу: получить с сервера набор данных, отобразить их и при этом ничего не терять при поворотах экрана и не делать лишних запросов. Первый вариант у меня получился сразу почти — просто взял и вызвал cache() на Observable, получаемый из синглтона, но он меня не устраивал — для принудительного обновления приходилось, по какой-то причине, пересоздавать экземпляры классов Retrofit и его же реализации моего интерфейса для API.

Пересоздание же самого Observable эффекта не давало — всегда возвращались старые данные вместо запуска нового сетевого запроса и получения новых данных. После долгих мучений с новой для себя технологией выяснил, что во всём был виновен cache() (точнее, наверное, моё неправильное оного понимание). Итак, приступим. Сначала напишем простейший php код, коий будет отдавать JSON. Теперь зависимости в gradle: Переходим к коду. Вот и всё. P.S. Немного о Stream API(Java 8) / Хабрахабр. Небольшая статья с примерами использования Stream API в Java8, которая, надеюсь, поможет начинающим пользователям освоить и использовать функционал.

Часто Stream API в Java8 используется для работы с коллекциями, позволяя писать код в функциональном стиле. Удобство и простота методов способствуют интересу к данному функционалу у разработчиков с момента его выхода. Итак, что такое Stream API в Java8? «Package java.util.stream» — «Classes to support functional-style operations on streams of elements, such as map-reduce transformations on collections». Попробую дать свой вариант перевода, фактически это — поддержка функционального стиля операций над потоками, такими как обработка и «свёртка» обработанных данных. «Stream operations are divided into intermediate and terminal operations, and are combined to form stream pipelines. Еще одна интересная особенность, это – наличие parallelStream(). Закончим с теоретической частью и перейдем к несложным примерам. Усложним примеры. Operators. Each language-specific implementation of ReactiveX implements a set of operators.

Although there is much overlap between implementations, there are also some operators that are only implemented in certain implementations. Also, each implementation tends to name its operators to resemble those of similar methods that are already familiar from other contexts in that language. Chaining Operators Most operators operate on an Observable and return an Observable. This allows you to apply these operators one after the other, in a chain. There are other patterns, like the Builder Pattern, in which a variety of methods of a particular class operate on an item of that same class by modifying that object through the operation of the method.

A chain of Observable operators do not operate independently on the original Observable that originates the chain, but they operate in turn, each one operating on the Observable generated by the operator immediately previous in the chain. Contents Just Start From Zip. Observable. In ReactiveX an observer subscribes to an Observable . Then that observer reacts to whatever item or sequence of items the Observable emits . This page explains what the reactive pattern is and what Observables and observers are (and how observers subscribe to Observables). See Also Single — a specialized version of an Observable that emits only a single item Rx Workshop: Introduction Introduction to Rx: IObservable Mastering observables (from the Couchbase Server documentation) 2 minute introduction to Rx by Andre Staltz (“Think of an Observable as an asynchronous immutable array.”) In many software programming tasks, you more or less expect that the instructions you write will execute and complete incrementally, one-at-a-time, in order as you have written them.

There are many terms used to describe this model of asynchronous programming and design. . Items or sends notifications to its observers by calling the observers’ methods. Call a method. Or, something like this: onNext onError onCompleted To. Bolein/Intro-To-RxJava: Углубленный русскоязычный туториал по RxJava. The Art of Rx / Блог компании JUG.ru Group. Проблема, друзья. Реактивщина везде, её слишком много и уже никому от неё не спрятаться. Мы с вами все умеем написать ASyncTask, Service или ContentProvider (я в это верю!). Все можем повернуть битмапу или сгонять на сервер за данными. Это все довольно очевидно. Но ещё МЫ ДУМАЕМ, что можем готовить реактивищну правильно. Это далеко не всегда так. Что такое правильное реактивное программирование на Android?

– Добрый день. . — Привет. Первый проект, который я полностью перевел на RxJava, у меня был в компании 2GIS. . – Пользователи Хабрахабра наверняка в курсе концепции реактивного программирования. . – В программировании под Андроид довольно много особенностей, связанных с реактивным программированием. Ещё одна особенность заключается в том, что очень много в Андроиде завязано на императивщину. Если мы берём отказоустойчивость, то ты всегда должен думать об этом. . – Что важнее: ресурсоёмкость или надёжность? Но, конечно, про ресурсоёмкость забывать тоже нельзя.

Потенциал ясен и он огромен. Введение в RxJava: Создание последовательности. Теперь, когда мы понимаем основные принципы Rx, настало время научиться создавать и управлять последовательностями. Стиль управления последовательностями был позаимствован у оригинального C# LINQ, который в свою очередь был вдохновлен функциональным программироанием. Мы поделим все операции по темам, которые отсортированы в порядке возрастания сложности операций. Большинство операторов Rx управляют уже существующими последовательностями, но для начала мы научимся их создавать.

Содержание Содержание: Часть первая – Вступление Часть вторая – Последовательности Создание последовательности Фильтрация последовательности Исследование Агрегация ТрансформацияЧасть третья – Управление последовательностямиЧасть четвертая – Параллельность Ранее, мы использовали Subject'ы и вручную подавали на них значения чтобы создать последовательность. Простые фабричные методы Observable.just just создает Observable, который выдаст определенное заранее количество значений, после чего завершится. Вывод Completed Вывод. Разбираемся с многопоточностью в RxJava / Хабрахабр. Writing a custom reactive base type. Introduction From time to time, the question or request comes up that one would really like to have his/her own reactive type. Even though RxJava's Observable has plenty of methods and extension points via lift(), extend() and compose(), one feels the Observable should have the operator xyz() or in some chains, the chain shouldn't allow calling uvw().

The first case, namely adding a new custom method without going through the project as a contribution, is as old as the reactive programming on the JVM. When I first ported Rx.NET to Java, I had to face the same problem because .NET had the very convenient extension method support already back in 2010. The second case, hiding or removing operators, comes up with custom Observables where certain operations don't make sense. Wrapping Both cases can be solved by writing a custom type and just wrap the Observable into it. Now we can add operators of our liking: Interoperation Extension Quite a set of generic type mangling. Let's try it: then use it: Android Dev Подкаст: Реактивщина от А до Я в Android (RXJava) Advanced RxJava: Operator-fusion (Part 1) Feedly. Read more, know more. Parallel execution of blocking tasks with RxJava and Completable | Java Code Geeks - 2016.

Advanced RxJava: FlatMap (part 1) M.habrahabr. Введение в RxJava: Жизненный цикл подписки / Хабрахабр. Home · ReactiveX/RxAndroid Wiki. Froussios/Intro-To-RxJava. Введение в RxJava, часть первая – Вступление: Почему Rx? Intro to Rx - Aggregation. RxJava Observable tranformation: concatMap() vs flatMap() | Fernando Cejas. Reark/reark. Home · ReactiveX/RxAndroid Wiki. RxJava Threading Examples - Evolvable Me. Android. Пару слов об MVP + rxJava. Advanced RxJava. Реактивное программирование в Android - ppApp.

Rxjava. Введение в RxJava, часть первая – Вступление: Ключевые типы / Хабрахабр. RxJava доставляет, Артём Зиннатуллин (Яндекс) — События Яндекса. Доклад Rx java. Реактивное программирование под Android / Блог компании 2ГИС. Java 8 в Android со Stream API и лямбдами. Грокаем* RxJava, часть первая: основы. RxJava. Борьба с вызовами суровой действительности.