SlideShare a Scribd company logo
INTRO TO RXJAVA
& RXANDROID
Egor Andreevici
WHAT?
HOW?
WHY?
& A DEMO
WHAT IS RXJAVA?
“RXJAVA IS A JAVA VM IMPLEMENTATION OF
REACTIVEX (REACTIVE EXTENSIONS): A
LIBRARY FOR COMPOSING ASYNCHRONOUS
AND EVENT-BASED PROGRAMS BY USING
OBSERVABLE SEQUENCES.”
RxJava Wiki
WHAT IS RXJAVA?
WHAT IS RXJAVA?
OBSERVABLES (AND MARBLE DIAGRAMS)
WHAT IS RXJAVA?
PROGRAM STRUCTURE
subscription = Observable
.create(…)
.transform(…)
.subscribe(...);
HOW RXJAVA?
HOW RXJAVA?
THE HIGH LEVEL PLAN
▸ Create an Observable
▸ Manipulate data using operators
▸ Subscribe and consume
▸ Profit!
HOW RXJAVA?
CREATING OBSERVABLES: CREATE()
Observable.create(subscriber -> {
try {
for (int value = 1; value <= 3; value++) {
subscriber.onNext(value);
}
subscriber.onCompleted();
} catch (Throwable t) {
subscriber.onError(t);
}
});
HOW RXJAVA?
THE OBSERVER INTERFACE
public interface Observer<T> {
void onCompleted();
void onError(Throwable e);
void onNext(T t);
}
HOW RXJAVA?
THE NOTIFICATIONS CONTRACT
▸ Zero or more onNext() notifications
▸ Either onCompleted() or onError(), not both!
▸ Nothing more!
▸ May never terminate
▸ May never call onCompleted()
▸ All notifications must be issued serially
HOW RXJAVA?
CREATING OBSERVABLES: JUST()
Observable.just(1);
Observable.just(1, 2);
Observable.just(1, 2, 3);
. . .
Observable.just(1, … , 9);
HOW RXJAVA?
CREATING OBSERVABLES: FROM()
Observable.from(Arrays.asList(1, 2, 3));
Observable.from(new Integer[]{1, 2, 3});
HOW RXJAVA?
CREATING OBSERVABLES: MISC
Observable.empty();
Observable.error(t);
Observable.never();
HOW RXJAVA?
Observable.create(subscriber -> {
try {
for (int i = 0; i < 10000; i++) {
T value = longRunningNetworkRequest();
subscriber.onNext(value);
}
subscriber.onCompleted();
} catch (Throwable t) {
subscriber.onError(t);
}
});
CAVEATS: HANDLING UNSUBSCRIBING
HOW RXJAVA?
SUBSCRIPTION INTERFACE
public interface Subscription {
void unsubscribe();
boolean isUnsubscribed();
}
HOW RXJAVA?
CAVEATS: HANDLING UNSUBSCRIBING
Observable.create(subscriber -> {
try {
for (int i = 0; i < 10000; i++) {
if (subscriber.isUnsubscribed()) {
return;
}
T value = longRunningNetworkRequest();
subscriber.onNext(value);
}
subscriber.onCompleted();
} catch (Throwable t) {
subscriber.onError(t);
}
});
HOW RXJAVA?
OPERATORS
▸ Transformational
▸ map()
▸ flatMap()
▸ concatMap()
▸ Filtering
▸ filter()
▸ take()
▸ skip()
▸ Combining
▸ merge()
▸ zip()
▸ combineLatest()
AND MANY MORE…
HOW RXJAVA?
OPERATORS: FILTER()
HOW RXJAVA?
OPERATORS: MAP()
HOW RXJAVA?
OPERATORS: FLATMAP()
HOW RXJAVA?
OPERATORS: ZIP()
HOW RXJAVA?
SUBSCRIBING TO OBSERVABLES
.subscribe(
value -> renderValue(value),
error -> renderError(error),
() -> Log.d(LOGTAG, "Done!"));
HOW RXJAVA?
MULTITHREADING: OPERATORS
Observable<T> observeOn(Scheduler scheduler) {}
Observable<T> subscribeOn(Scheduler scheduler) {}
HOW RXJAVA?
MULTITHREADING: SCHEDULERS
Schedulers.io()
Schedulers.computation()
Schedulers.newThread()
Schedulers.from(Executor)
HOW RXJAVA?
TESTING: BLOCKING OBSERVABLES
@Test
public void testingWithBlockingObservable() {
Observable<Integer> intObservable =
Observable.just(1, 2, 3);
BlockingObservable<Integer> blocking =
intObservable.toBlocking();
assertThat(blocking.first()).isEqualTo(1);
assertThat(blocking.last()).isEqualTo(3);
blocking.getIterator();
blocking.toIterable();
}
HOW RXJAVA?
TESTING: TESTSUBSCRIBER
@Test
public void testingWithTestSubscriber() {
Observable<Integer> intObservable =
Observable.just(1, 2, 3);
TestSubscriber<Integer> testSubscriber =
TestSubscriber.create();
intObservable.subscribe(testSubscriber);
testSubscriber.assertValues(1, 2, 3);
testSubscriber.assertNoErrors();
testSubscriber.assertCompleted();
}
HOW RXJAVA?
DEBUGGING: SIDE EFFECTS
Observable.just(1, 2, 3)
.doOnNext(next -> append("Before filter: " + next))
.filter(value -> value % 2 == 0)
.doOnNext(next -> append("After filter: " + next))
.subscribe(...);
RXJAVA ON ANDROID
RXJAVA ON ANDROID
RXANDROID
▸ Super tiny
▸ AndroidSchedulers.mainThread()
▸ HandlerScheduler.from(Handler)
RXJAVA ON ANDROID
RXBINDING
▸ RxJava binding APIs for Android's UI widgets
▸ RxView.clicks(…), RxView.enabled(…) etc.
▸ RxTextView.textChanges(…)
RXJAVA ON ANDROID
RXLIFECYCLE
▸ Lifecycle handling APIs for Android apps using RxJava
▸ .compose(RxLifecycle.bindActivity(lifecycle))
▸ RxActivity, RxFragment
▸ .compose(bindToLifecycle())
RXJAVA ON ANDROID
RETROFIT: THE UGLY
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
GithubApiClient client = createGithubApiClient();
try {
List<Repo> repos = client.getRepos().execute().body();
// render repos
} catch (IOException e) {
// handle
}
}
RXJAVA ON ANDROID
RETROFIT: THE BAD
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
GithubApiClient client = createGithubApiClient();
client.getRepos().enqueue(new Callback<List<Repo>>() {
@Override
public void onResponse(Call<List<Repo>> call,
Response<List<Repo>> response) {
// render repos
}
@Override
public void onFailure(Call<List<Repo>> call,
Throwable t) {
// handle
}
});
}
RXJAVA ON ANDROID
RETROFIT: THE GOOD
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
GithubApiClient client = createGithubApiClient();
subscription = client.getRepos()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
repos -> renderRepos(repos),
error -> handleError(error));
}
WHY RXJAVA?
WHY RXJAVA?
WHY RXJAVA?
▸ Set of powerful operators
▸ Easy threading
▸ Explicit error handling
▸ Testable
▸ Lots of perks specific to Android
DEMO TIME!
THANK YOU!
Egor Andreevici
blog.egorand.me · @EgorAnd · +EgorAndreevich

More Related Content

What's hot (20)

PPTX
Reactive programming with RxAndroid
Savvycom Savvycom
 
PPTX
Reactive Java (33rd Degree)
Tomasz Kowalczewski
 
PDF
Building Scalable Stateless Applications with RxJava
Rick Warren
 
PDF
Introduction to RxJS
Brainhub
 
PDF
Reactive programming on Android
Tomáš Kypta
 
PDF
Practical RxJava for Android
Tomáš Kypta
 
PDF
Reactive programming with RxJava
Jobaer Chowdhury
 
PDF
My Gentle Introduction to RxJS
Mattia Occhiuto
 
PDF
Reactive Android: RxJava and beyond
Fabio Tiriticco
 
PDF
Rxjava meetup presentation
Guillaume Valverde
 
PPTX
RxJava Applied
Igor Lozynskyi
 
PPTX
Rxjs ppt
Christoffer Noring
 
PDF
RxJava applied [JavaDay Kyiv 2016]
Igor Lozynskyi
 
PDF
rx-java-presentation
Mateusz Bukowicz
 
PPTX
Rx java in action
Pratama Nur Wijaya
 
PPTX
Introduction to Reactive Java
Tomasz Kowalczewski
 
PPTX
Rxjs ngvikings
Christoffer Noring
 
PPTX
Reactive Java (GeeCON 2014)
Tomasz Kowalczewski
 
PDF
Introduction to Retrofit and RxJava
Fabio Collini
 
PDF
Functional Reactive Programming / Compositional Event Systems
Leonardo Borges
 
Reactive programming with RxAndroid
Savvycom Savvycom
 
Reactive Java (33rd Degree)
Tomasz Kowalczewski
 
Building Scalable Stateless Applications with RxJava
Rick Warren
 
Introduction to RxJS
Brainhub
 
Reactive programming on Android
Tomáš Kypta
 
Practical RxJava for Android
Tomáš Kypta
 
Reactive programming with RxJava
Jobaer Chowdhury
 
My Gentle Introduction to RxJS
Mattia Occhiuto
 
Reactive Android: RxJava and beyond
Fabio Tiriticco
 
Rxjava meetup presentation
Guillaume Valverde
 
RxJava Applied
Igor Lozynskyi
 
RxJava applied [JavaDay Kyiv 2016]
Igor Lozynskyi
 
rx-java-presentation
Mateusz Bukowicz
 
Rx java in action
Pratama Nur Wijaya
 
Introduction to Reactive Java
Tomasz Kowalczewski
 
Rxjs ngvikings
Christoffer Noring
 
Reactive Java (GeeCON 2014)
Tomasz Kowalczewski
 
Introduction to Retrofit and RxJava
Fabio Collini
 
Functional Reactive Programming / Compositional Event Systems
Leonardo Borges
 

Viewers also liked (20)

PDF
Opportunity presentation tell the story (nz)
Albert Jackson
 
PDF
Making the Most of Your Gradle Builds
Egor Andreevich
 
PDF
Explorando novas telas com o Google TV
Antonio Marin Neto
 
PPT
Choice Paralysis
Flux Trend Analysis
 
PDF
About Flux
Jooyoung Moon
 
PDF
React.js and Flux in details
Artyom Trityak
 
PPTX
Android Design Principles and Popular Patterns
Faiz Malkani
 
PPT
Building Reactive webapp with React/Flux
Keuller Magalhães
 
PPTX
Flux architecture
Boyan Mihaylov
 
PPTX
Intro to Flux - ReactJS Warsaw #1
Damian Legawiec
 
PDF
React & Flux Workshop
Christian Lilley
 
PPTX
Clean architecture on android
Benjamin Cheng
 
PPTX
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
Hiroyuki Kusu
 
PPTX
Lightning Talk - Clean Architecture and Design
Deivison Sporteman
 
PDF
GDG 2014 - RxJava를 활용한 Functional Reactive Programming
waynejo
 
PDF
Is Activity God? ~ The MVP Architecture ~
Ken William
 
PDF
Clean architecture: Android
intive
 
PPTX
Design Pattern - MVC, MVP and MVVM
Mudasir Qazi
 
PDF
Clean Architecture
Badoo
 
PDF
RxAndroid: 비동기 및 이벤트 기반 프로그래밍을 위한 라이브러리
Soyeon Kim
 
Opportunity presentation tell the story (nz)
Albert Jackson
 
Making the Most of Your Gradle Builds
Egor Andreevich
 
Explorando novas telas com o Google TV
Antonio Marin Neto
 
Choice Paralysis
Flux Trend Analysis
 
About Flux
Jooyoung Moon
 
React.js and Flux in details
Artyom Trityak
 
Android Design Principles and Popular Patterns
Faiz Malkani
 
Building Reactive webapp with React/Flux
Keuller Magalhães
 
Flux architecture
Boyan Mihaylov
 
Intro to Flux - ReactJS Warsaw #1
Damian Legawiec
 
React & Flux Workshop
Christian Lilley
 
Clean architecture on android
Benjamin Cheng
 
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
Hiroyuki Kusu
 
Lightning Talk - Clean Architecture and Design
Deivison Sporteman
 
GDG 2014 - RxJava를 활용한 Functional Reactive Programming
waynejo
 
Is Activity God? ~ The MVP Architecture ~
Ken William
 
Clean architecture: Android
intive
 
Design Pattern - MVC, MVP and MVVM
Mudasir Qazi
 
Clean Architecture
Badoo
 
RxAndroid: 비동기 및 이벤트 기반 프로그래밍을 위한 라이브러리
Soyeon Kim
 
Ad

Similar to Intro to RxJava/RxAndroid - GDG Munich Android (20)

PPTX
Introduction to RxJava on Android
Chris Arriola
 
PPTX
Intro to Functional Programming with RxJava
Mike Nakhimovich
 
PDF
The Mayans Lost Guide to RxJava on Android
Fernando Cejas
 
PDF
Intro to Rx Java
Syed Awais Mazhar Bukhari
 
PDF
How to Think in RxJava Before Reacting
IndicThreads
 
PDF
Rx java workshop
Mayowa Egbewunmi
 
PDF
Streamlining with rx
Akhil Dad
 
PPTX
RxJava 2 Reactive extensions for the JVM
Netesh Kumar
 
PDF
Saving lives with rx java
Shahar Barsheshet
 
PDF
RxJava@Android
Maxim Volgin
 
PPTX
Rxandroid
Thinh Thanh
 
PPTX
RxAndroid
Thinh Thanh
 
PDF
RxJava pour Android : présentation lors du GDG Android Montréal
Sidereo
 
PDF
Streams, Streams Everywhere! An Introduction to Rx
Andrzej Sitek
 
PPTX
Reactive Programming on Android
Guilherme Branco
 
PDF
RxJava@DAUG
Maxim Volgin
 
PDF
RxJava - introduction & design
allegro.tech
 
PPT
Presentation - We live in a reactive world - TechForumIberia2016
Sergi Castillo Malpesa
 
PPTX
Javantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PPTX
Reactive Programming in Java 8 with Rx-Java
Kasun Indrasiri
 
Introduction to RxJava on Android
Chris Arriola
 
Intro to Functional Programming with RxJava
Mike Nakhimovich
 
The Mayans Lost Guide to RxJava on Android
Fernando Cejas
 
Intro to Rx Java
Syed Awais Mazhar Bukhari
 
How to Think in RxJava Before Reacting
IndicThreads
 
Rx java workshop
Mayowa Egbewunmi
 
Streamlining with rx
Akhil Dad
 
RxJava 2 Reactive extensions for the JVM
Netesh Kumar
 
Saving lives with rx java
Shahar Barsheshet
 
RxJava@Android
Maxim Volgin
 
Rxandroid
Thinh Thanh
 
RxAndroid
Thinh Thanh
 
RxJava pour Android : présentation lors du GDG Android Montréal
Sidereo
 
Streams, Streams Everywhere! An Introduction to Rx
Andrzej Sitek
 
Reactive Programming on Android
Guilherme Branco
 
RxJava@DAUG
Maxim Volgin
 
RxJava - introduction & design
allegro.tech
 
Presentation - We live in a reactive world - TechForumIberia2016
Sergi Castillo Malpesa
 
Javantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Reactive Programming in Java 8 with Rx-Java
Kasun Indrasiri
 
Ad

Recently uploaded (20)

PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PDF
Simplify React app login with asgardeo-sdk
vaibhav289687
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PPTX
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
PDF
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PDF
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
PPTX
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
Add Background Images to Charts in IBM SPSS Statistics Version 31.pdf
Version 1 Analytics
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PDF
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PPTX
Coefficient of Variance in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PDF
Dipole Tech Innovations – Global IT Solutions for Business Growth
dipoletechi3
 
PPTX
iaas vs paas vs saas :choosing your cloud strategy
CloudlayaTechnology
 
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
Simplify React app login with asgardeo-sdk
vaibhav289687
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Add Background Images to Charts in IBM SPSS Statistics Version 31.pdf
Version 1 Analytics
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
Coefficient of Variance in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
Dipole Tech Innovations – Global IT Solutions for Business Growth
dipoletechi3
 
iaas vs paas vs saas :choosing your cloud strategy
CloudlayaTechnology
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 

Intro to RxJava/RxAndroid - GDG Munich Android