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

Reactive way on Android

Reactive way on Android

Presentation at ReactiveX meetup first in Bangkok, Thailand

WeRockStar

August 30, 2019
Tweet

More Decks by WeRockStar

Other Decks in Programming

Transcript

  1. @werockstar Interested - Fundamental - OOP, FP, RP - Design

    Pattern, Refactoring - Software Design
  2. @werockstar button.clicks() .subscribe() click click click click Button as an

    producer(observable) Emitter of event() value over time Time
  3. @werockstar button.clicks() .subscribe( { data -> println(data) }, { error

    -> } ) Observer or subscriber Observer doesn't know anything about the data come from and when, or how many times
  4. @werockstar button.clicks() .subscribe( { data -> println(data) }, { error

    -> } ) Why <- Producer (Observable) <- Observer
  5. @werockstar .subscribe( { data -> println(data) }, { error ->

    } ) button.clicks() Why Decoupling the relationship Know little about each other
  6. @werockstar editText.afterTextChangeEvents() .debounce(200, MILLISECONDS) .distinctUntilChanged() .map { it.editable.toString() } .switchMap

    { api.getResult(it) } .subscribe() A A B ก้าวแรกไม่เป็นไร ก้าวต่อไปไฟเริ่มไหม้ getResult
  7. @werockstar editText.afterTextChangeEvents() .debounce(200, TimeUnit.MILLISECONDS) .distinctUntilChanged() .map { it.editable.toString() } .switchMap

    { api.getResult(it) .retry { attempt, throwable -> throwable is TimeoutException && attempt <= 2 } }.subscribe()
  8. @werockstar editText.afterTextChangeEvents() .debounce(200, TimeUnit.MILLISECONDS) .distinctUntilChanged() .map { it.editable.toString() } .switchMap

    { api.getResult(it) .retry { attempt, throwable -> throwable is TimeoutException && attempt <= 2 } }.subscribe() .onErrorReturnItem("WeRockStar") ✅
  9. @werockstar editText.afterTextChangeEvents() ... .switchMap { api.getResult(it) .retryWhen { it.flatMap {

    throwable -> when (throwable.code()) { 401 -> api.getSomeToken("refresh_token") else -> Observable.error(throwable) } } } }.subscribe() 1 2
  10. @werockstar Reactive Data Flow Back Pressure Flow Control Subject Push/Pull

    Hot/Cold Messaging Responsive Elastic Publish/Subscribe Resilience Stream
  11. @werockstar 80 Years of Life 5 ปีหมดไปการลองใช้ Rx 10 ปีหมดไปกับ

    Observable 25 ปีหมดไปกับ FlatMap ส่วน 40 ปีที่เหลือหมดไปกับการทำความเข้าใจ และอธิบาย Reactive