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

Introduction to AutoDispose

Shohei Kawano
January 24, 2018

Introduction to AutoDispose

If you use RxLifecycle, maybe now is the time to switch from it to AutoDispose.

"AutoDispose is an RxJava 2 tool for automatically binding the execution of RxJava 2 streams to a provided scope via disposal/cancellation."

- https://github.com/uber/AutoDispose
- http://blog.danlew.net/2017/08/02/why-not-rxlifecycle

Shohei Kawano

January 24, 2018
Tweet

More Decks by Shohei Kawano

Other Decks in Technology

Transcript

  1. AutoDispose
    shaunkawano

    View Slide

  2. https://github.com/uber/AutoDispose#autodispose
    AutoDispose
    • From Uber Technologies
    • “RxJava 2 tool for automatically binding the
    execution of RxJava 2 streams to a provided
    scope“
    • Architecturally better version of RxLifecycle

    View Slide

  3. Handling Streams
    • CompositeDisposable
    • RxLifecycle
    • No Reactive Extensions

    View Slide

  4. Handling Streams
    • CompositeDisposable
    • RxLifecycle
    • No Reactive Extensions

    View Slide

  5. CompositeDisposable
    private val disposables = CompositeDisposable()
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    myObservable.doStuff()
    .subscribeBy { ... }
    .addTo(disposables)
    }
    override fun onDestroy() {
    disposables.dispose()
    super.onDestroy()
    }

    View Slide

  6. CompositeDisposable
    private val disposables = CompositeDisposable()
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    myObservable.doStuff()
    .subscribeBy { ... }
    .addTo(disposables)
    }
    override fun onDestroy() {
    disposables.dispose()
    super.onDestroy()
    }

    View Slide

  7. CompositeDisposable
    private val disposables = CompositeDisposable()
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    myObservable.doStuff()
    .subscribeBy { ... }
    .addTo(disposables)
    }
    override fun onDestroy() {
    disposables.dispose()
    super.onDestroy()
    }

    View Slide

  8. CompositeDisposable
    private val disposables = CompositeDisposable()
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    myObservable.doStuff()
    .subscribeBy { ... }
    .addTo(disposables)
    }
    override fun onDestroy() {
    disposables.dispose()
    super.onDestroy()
    }

    View Slide

  9. RxLifecycle
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    myObservable
    .bindToLifecycle(this, DESTROY)
    .subscribe { }
    }

    View Slide

  10. RxLifecycle
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    myObservable
    .bindToLifecycle(this, DESTROY)
    .subscribe { }
    }

    View Slide

  11. UnSubscription
    https://github.com/trello/RxLifecycle#unsubscription

    View Slide

  12. UnSubscription
    https://github.com/trello/RxLifecycle#unsubscription

    View Slide

  13. http://blog.danlew.net/2017/08/02/why-not-rxlifecycle

    View Slide

  14. http://blog.danlew.net/2017/08/02/why-not-rxlifecycle

    View Slide

  15. https://github.com/uber/AutoDispose#autodispose
    AutoDispose
    implementation 'com.uber.autodispose:autodispose:x.y.z'
    // Java
    myObservable
    .doStuff()
    .as(autoDisposable(this)) // The magic
    .subscribe(s -> ...);

    View Slide

  16. AutoDispose
    autodispose-android
    com.uber.autodispose:

    View Slide

  17. AutoDispose
    autodispose-android
    com.uber.autodispose:
    autodispose-android-archcomponents

    View Slide

  18. AutoDispose
    autodispose-android
    com.uber.autodispose:
    autodispose-android-archcomponents
    autodispose-rxlifecycle

    View Slide

  19. AutoDispose Kotlin
    autodispose-android-kotlin
    com.uber.autodispose:
    autodispose-android-archcomponents-kotlin

    View Slide

  20. AutoDispose Kotlin
    autodispose-android-kotlin
    com.uber.autodispose:
    autodispose-android-archcomponents-kotlin

    View Slide

  21. LifecycleOwner

    View Slide

  22. Extension Functions
    @CheckReturnValue
    inline fun LifecycleOwner.scope(): LifecycleScopeProvider =
    AndroidLifecycleScopeProvider.from(this)
    @CheckReturnValue
    inline fun LifecycleOwner.scope(untilEvent: Lifecycle.Event):
    LifecycleScopeProvider
    = AndroidLifecycleScopeProvider.from(this, untilEvent)
    // autodispose-android-archcomponents-kotlin

    View Slide

  23. AutoDispose with Arch Lifecycle
    protected val scope: LifecycleScopeProvider by lazy {
    AndroidLifecycleScopeProvider.from(this) // or scope()
    })

    store.myState.autoDisposable(scope).subscribeBy(onNext = { … })
    // Activity.kt

    View Slide

  24. AutoDispose with Arch Lifecycle
    protected val scope: LifecycleScopeProvider by lazy {
    AndroidLifecycleScopeProvider.from(this) // or scope()
    })

    store.myState.autoDisposable(scope).subscribeBy(onNext = { … })
    // Activity.kt

    View Slide

  25. AutoDispose
    shaunkawano
    Thank you!

    View Slide