Project Url: sellmair/disposer
Introduction: Easily dispose rxJava streams with Android's Lifecycle
More: Author   ReportBugs   

Easily dispose RxJava streams with Android's Lifecycle

GitHub top language Build Status Bintray

Checkout my Medium article.


dependencies {
    // Non AndroidX projects
    implementation 'io.sellmair:disposer:1.1.0'

    // AndroidX projects
    implementation 'io.sellmair:disposer:2.0.0'


A Disposer is the object managing multiple Disposable instances and disposes them at the correct time.

You can easily add a given disposable to a Disposer:

val disposer: Disposer = /* ... */
val disposable = Service.queryAwesomeData().subscribe()
disposer.add(disposable)  // The disposable will now managed by the disposer

Or a much sweeter apis, that might look familiar to rxKotlin users:

val disposer: Disposer = /* ... */
disposer += Service.queryAwesomeData().subscribe() // Managed by the disposer
val disposer: Disposer = /* ... */
Service.queryAwesomeData().subscribe().disposeBy(disposer) // Managed by the disposer

Get the correct Disposer

RxLifecycle makes it easy to get a disposer for each lifecycle hook like onCreate, onStart, onResume, onPause, onStop and onDestroy

One can simple call the extension function:

val onStopDisposer: Disposer = lifecycle.disposers.onStop

Much more shorter and convenient extensions are also offered, like for LifecycleOwner:

class MyCoolComponent: LifecycleOwner {

    // ...

    private val onStopDisposer: Disposer = this.onStop


Which leads to very concise and readable API's inside your Activity or Fragment classes:

class MyCoolFragment {

    // awesome other code 

    fun onStart(){

            .disposeBy(onStop) // <---  Will automatically be disposed when onStop() is called.
Advanced: Upstream dispose

It is also possible to put the .disposeBy call before the .subscribe. But be aware, that this will only dispose the upstream not the downstream, which is often okay, but should only be used with caution!

    .disposeBy(onStop) // <--- Will dispose everything above it when .onStop() is called
Create you own Disposer

You can easily create your own Disposer by calling

val disposer = Disposer.create()

Each call of


Will dispose all currently managed disposables and reset the Disposer

⚠️ Be aware: This behaviour differs from CompositeDisposable and actually is more like CompositeDisposable.clear.

Support Me
About Me
Google+: Trinea trinea
GitHub: Trinea