Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RxAndroid at #JavaSkop

RxAndroid at #JavaSkop

A short presentation about RxAndroid that I was supposed to give at #JavaSkop.

Avatar for Stojan Dimitrovski

Stojan Dimitrovski

December 13, 2015
Tweet

More Decks by Stojan Dimitrovski

Other Decks in Programming

Transcript

  1. #JavaSkop · stojan.me · RxAndroid 3 Rx = Reactive Extensions

    “Special” data processing API. Introduced by Microsoft for .NET. RxJava, RxClojure, RxCpp... reactivex.io
  2. #JavaSkop · stojan.me · RxAndroid 9 How does this help?

    Observables are black boxes that produce data. Single Responsibility Observers consume data. Information Hiding Subscriptions are the glue. Weak Coupling
  3. #JavaSkop · stojan.me · RxAndroid 11 interface CookieFactory { /**

    Makes cookies for consumption. */ Observable<Cookie> cookies(); } cookieFactory.cookies().forEach(/* onNext */ new Action1<>() { @Override public void call(Cookie cookie) { eat(cookie); } }, /* onError */ new Action1<>() { @Override public void call(Throwable throwable) { call(911); } }, /* onCompleted */ new Action0() { @Override public void call() { cry(); } });
  4. #JavaSkop · stojan.me · RxAndroid 12 interface CookieFactory { /**

    Makes cookies for consumption. */ Observable<Cookie> cookies(); } cookieFactory.cookies().forEach(/* onNext */ new Action1<>() { @Override public void call(Cookie cookie) { eat(cookie); } }, /* onError */ new Action1<>() { @Override public void call(Throwable throwable) { call(911); } }, /* onCompleted */ new Action0() { @Override public void call() { cry(); } });
  5. #JavaSkop · stojan.me · RxAndroid 13 interface CookieFactory { /**

    Makes cookies for consumption. */ Observable<Cookie> cookies(); } cookieFactory.cookies().forEach(/* onNext */ new Action1<>() { @Override public void call(Cookie cookie) { eat(cookie); } }, /* onError */ new Action1<>() { @Override public void call(Throwable throwable) { call(911); } }, /* onCompleted */ new Action0() { @Override public void call() { cry(); } });
  6. #JavaSkop · stojan.me · RxAndroid 14 interface CookieFactory { /**

    Makes cookies for consumption. */ Observable<Cookie> cookies(); } cookieFactory.cookies().forEach(/* onNext */ new Action1<>() { @Override public void call(Cookie cookie) { eat(cookie); } }, /* onError */ new Action1<>() { @Override public void call(Throwable throwable) { call(911); } }, /* onCompleted */ new Action0() { @Override public void call() { cry(); } });
  7. #JavaSkop · stojan.me · RxAndroid 15 /** Makes boxes of

    cookies. */ Observable<DeliciousBox> boxesOfCookies() { return cookies().buffer(10).map(new Func1<...>() { @Override public DeliciousBox call(List<Cookie> cookies) { return package(cookies); } }; }
  8. #JavaSkop · stojan.me · RxAndroid 16 /** Makes boxes of

    cookies on a new thread. */ Observable<DeliciousBox> boxesOfCookies() { return cookies() .subscribeOn(Schedulers.newThread()) .buffer(10) .map(new Func1<...>() { @Override public DeliciousBox call(List<Cookie> cookies) { return package(cookies); } }; }}
  9. #JavaSkop · stojan.me · RxAndroid 18 class MainAtivity extends Activity

    { Subscription friends; @Override public void onResume() { friends = Facebook.friendsFor(user) // loading of friends happens on a new thread .subscribeOn(Schedulers.newThread()) // friends are shown on the main thread .observeOn(AndroidSchedulers.mainThread()) .subscribe( /* onNext */ showFriend, /* onError */ showError, /* onCompleted */ yay); } @Override public void onPause() { // stops the process, kills the thread // disconnects HTTP request friends.unsubscribe(); } }
  10. #JavaSkop · stojan.me · RxAndroid 19 Observable.create(new Observable.OnSubscribe<Cookie>() { @Override

    public void call(Subscriber<Cookie> subscriber) { // blocking is OK here try { while (!subscriber.isSubscribed()) { // make the cookies while we have someone to eat them subscriber.onNext(makeCookie()); } subscriber.onCompleted(); } catch (Throwable t) { subscriber.onError(t); } } });
  11. #JavaSkop · stojan.me · RxAndroid 20 What You Get 1.

    Process decoupled from implementation, place of execution. 2. Composition of processes to form new processes. 3. Testable code. Yay for Quality! 4. Synchronization no longer a (big) issue. 5. Truly cancellable operations. (More or less.)
  12. #JavaSkop · stojan.me · RxAndroid 21 Things to Have in

    Mind 1. Keep data immutable. 2. Order of subscribeOn / observeOn does not matter. 3. Call subscribeOn / observeOn before subscription. 4. Use toBlockingObservable() sparingly. 5. cache() is my favorite operator. <3
  13. #JavaSkop · stojan.me · RxAndroid 22 Take Away • Observables

    are processes that emit data. • Observers use the data. • Subscriptions are what links Observables with Observers. • subscribeOn() to change execution Scheduler. • observeOn() to change observation Scheduler.
  14. #JavaSkop · stojan.me · RxAndroid 23 Questions? icon by Nathan

    Thompson, under CC-BY https://thenounproject.com/waymanate/