tech meetup: be reactive with android

23

Upload: santex-group

Post on 07-Apr-2017

50 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Tech Meetup: Be reactive with Android
Page 2: Tech Meetup: Be reactive with Android

#TechMeetup

Be Reactive

Page 3: Tech Meetup: Be reactive with Android

Be Reactive

Agenda

Intro

Anatomia

Operadores

Showtime!

Page 4: Tech Meetup: Be reactive with Android

Be Reactive - Intro

Qué diferencia hay entre una consulta DB y las transmisiones de un mouse por puerto serie?

Page 5: Tech Meetup: Be reactive with Android

Be Reactive - Intro

Programación reactiva es programar usando stream de datos de manera asíncrona.

Combinación de Patrones Observer e Interator junto Programación Funcional

Page 6: Tech Meetup: Be reactive with Android

Be Reactive - Intro

Rx es:

Set of types -> Representing async data stream

Set of Operators -> Query async data stream

Set of Types -> Parameterize concurrency

Page 7: Tech Meetup: Be reactive with Android

Be Reactive - Anatomia

Los bloques básicos son: Observables y Observers

Una implementación común de los Observers son los Subscribers

Un Observable emite items y un Subscriber los consume

Page 8: Tech Meetup: Be reactive with Android

Be Reactive - Anatomia

Pero el patrón Observer…

Una diferencia, es que un Observable no emite items hasta no alguien no se suscriba explícitamente.

Pero el patrón Iterator…

Hay una dualidad con este patrón, Evento Iterable (pull) Observable (push)

Recuperar datos T next() onNext(T)

Descubrir errores throws Exception onError(Exception)

Completado returns onCompleted()

Page 9: Tech Meetup: Be reactive with Android

Be Reactive - Anatomia

Si combinamos Observables y Observers:

Observable.from() .subscribeOn() .observeOn() .subscribe()

Page 10: Tech Meetup: Be reactive with Android

Be Reactive - Anatomia

Y la concurrencia....? Schedulers

Observable.from() .subscribeOn() .observeOn() .subscribe()

subscribeOn() -> realizá todas las operaciones en este Thread.observerOn() -> pusheá los resultados a este Thread.

Page 11: Tech Meetup: Be reactive with Android

Observers / Subscriber

new Observer<T>() { @Override public void onCompleted() {} @Override public void onError(Throwable throwable) {} @Override public void onNext(T t) {}};

Be Reactive - Anatomia

Page 12: Tech Meetup: Be reactive with Android

Be Reactive - Anatomia

Subscriptions = Observable Observer

Page 13: Tech Meetup: Be reactive with Android

Be Reactive - Operadores

Permiten componer secuencias asíncronas de manera declarativa.

Operan sobre Observables y retornan Observables

Permiten encadenarse, como el patrón Builder, pero en este caso el orden si importa.

Page 14: Tech Meetup: Be reactive with Android

Be Reactive - Operadores

create() crea un Observable desde cero.from() convierte otros objetos en Observablesjust() convierte otro objeto u objetos en Observables que emita esos objetos.

Page 15: Tech Meetup: Be reactive with Android

Be Reactive - Operadores

map() (Transforming)

Puede ser usado para transformar un ítem emitido en otro tipo.

myObservable.map(new Func1<String, Integer>() { @Override public Integer call(String s) { return s.hashCode(); }});

Page 16: Tech Meetup: Be reactive with Android

Be Reactive - Operadores

flatMap() (Transforming)

Transforma los ítems emitidos por un Observable en Observables, y luego “aplana” la emisión de esos Observables en un solo.

myObservable.flatMap(new Func1<List<String>, Observable<String>>() {

@Override public Observable<String> call(List<String> list) { return Observable.from(list); }})

Page 17: Tech Meetup: Be reactive with Android

Be Reactive - Operadores

zip() (Combining)

Combina los ítems emitidos por múltiples Observables y emite un solo ítem basado en el resultado de una función.

Observable.zip(myObservable, myObservable2, new Func2<String, String, Pair<String, String>>() { @Override

public Pair<String, String> call(String s, String s2) {return new Pair<String, String>(s, s2); }});

Page 18: Tech Meetup: Be reactive with Android

Be Reactive - Operadores

combineLastest() (Combining)

Cuando un ítem es emitido por alguno de los Observables, lo combina con el último emitido por cada Observable y emite el resultado basado en una función

Page 19: Tech Meetup: Be reactive with Android

Be Reactive - Operadores

debounce() (filtering)

Solo emite un ítem si un tiempo particular ha transcurrido.

myObservable.debounce(400, TimeUnit.MILLISECONDS)

Page 20: Tech Meetup: Be reactive with Android

Be Reactive - Example

AsyncTask

new AsyncTask<String, Void ,User>(){ @Override protected User doInBackground(String... values) {

return githubApi.getUser(values[0]); }

@Override protected void onPostExecute(User user) { super.onPostExecute(user); }};

Page 21: Tech Meetup: Be reactive with Android

Be Reactive - Example

Rx

Observable.create(new Observable.OnSubscribe<User>() { @Override public void call(Subscriber<? super User> subscriber) { User user = githubApi.getUser("username");

subscriber.onNext(user); subscriber.onCompleted(); }}).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<User>() { ... });

Page 22: Tech Meetup: Be reactive with Android

Be Reactive - Cooking, Cooking, Cooking

Page 23: Tech Meetup: Be reactive with Android

santexgroup.com