Top Banner
RxJava Douglas Drumond [email protected]
33

RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

May 28, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

RxJava

Douglas [email protected]

Page 2: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

whoami

Page 3: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions
Page 4: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Por que RxJava?

Eventos de UIEventos do domínioConcorrência

Page 5: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

RxJava

Observer pattern

Iterator pattern

Functional programming

Page 6: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Lambda

Page 7: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Retrolambda

export JAVA_HOME=/path/java8export JAVA7_HOME=/path/java7

Page 8: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Retrolambda

plugins { id "me.tatarka.retrolambda" version "3.2.2" }

android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }

Page 9: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Retrolambda

view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { ... } });

Page 10: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Retrolambda

view.setOnClickListener(v -> {

});

Page 11: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Básico

Observables

Subscribers

Operadores

Page 12: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Observables

Emite itens

Chama onNext, onComplete ou onError

Hot or Cold

Page 13: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Subscriber

ImplementaonNext

onComplete

onError

Page 14: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Operadores

flatMapfilterdebouncecreatedeferetc

Page 15: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Criando Observable e Subscriber

DEMO

Page 16: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Operators

Subscribers reagem, não mudam

Operadores transformam dados

Page 17: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Operators

DEMO

Page 18: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Exemplo com UI

DEMO

Page 19: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Mais operadores

filter

Ex: .filter(query -> !TextUtils.isEmpty(query))

Page 20: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Threads

subscribeOn

observeOn

NewThreadSchedulerHandlerThreadScheduler

Page 21: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Rede

DEMO

Page 22: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Tratamento de errosObservable.create(...)

.map(s -> exception(s))

.map(s -> exception2(s))

.subscribe(new Subscriber<String>() {@Override public void onNext(String s) { Log.d(TAG, s); }@Override public void onCompleted() { Log.d(TAG, "uhu!"); }@Override public void onError(Throwable e) { Log.e(TAG, "ops!"); }

});

Page 23: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Ciclo de vida da Activity

.cache

.unsubscribe ao rodar

.subscribe ao restaurar

Use RxLifecycle

Page 24: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Google Play Services

https://github.com/mcharmas/Android-ReactiveLocation

https://github.com/zmarkan/Reactive-PlayServices

Page 25: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Google Play ServicesReactiveLocationProvider locationProvider = new ReactiveLocationProvider(context);locationProvider.getLastKnownLocation()

.subscribe(new Action1<Location>() {@Override

public void call(Location location) { doSthImportantWithObtainedLocation(location); }

});

Page 26: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Testes

@Testpublic void shouldLoadTwoUsers() throw Exception { TestSubscriber<User> testSubscriber = new TestSubscriber<>(); databaseHelper.loadUser().subscribe(testSubscriber); testSubscriber.assertNoErrors(); testSubscriber.assertReceivedOnNext( Arrays.asList(user1, user2))}

Page 27: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Testes

https://github.com/ribot/assertj-rx + BlockingObservable

Page 28: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Testes (exemplo)

assertThat(observable.toBlocking()).completes();

assertThat(observable.toBlocking()) .completes() .listOfValuesEmitted() .containsExactly("a", "b", "c");

Page 29: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Referências

http://reactivex.io/https://github.com/ReactiveX/RxJava/wiki

/Alphabetical-List-of-Observable-Operatorshttps://speakerdeck.com/benjchristensenhttps://github.com/mutexkid/rxjava-koans

Page 30: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Referências

https://github.com/trello/RxLifecycle

https://github.com/JakeWharton/RxBinding

https://github.com/ReactiveX/RxAndroid/

Page 31: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Código

https://github.com/douglasdrumond/KnightsOfLambdaCalculus

Page 32: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Obrigado

Page 33: RxJava - qconrio.comqconrio.com/rio2015/system/files/presentation-slides/douglas_drum… · Retrolambda plugins {id "me.tatarka.retrolambda" version "3.2.2" } android {compileOptions

Contato

[email protected]

@douglasdrumond +DouglasDrumondwww.cafelinear.com

[email protected]