[Android] RxLifecycleを使ってObservableを自動でdisposeする

RxLifecycleを使うと、RxJavaのDisposableをライフサイクルに合わせて自動でdisposeしてくれて便利です。同様のライブラリにはUberが開発しているAutoDisposeがありますが、今回は実績重視でRxLifecycleを使いました。また、RxLifecycleは3系が既に公開されていますが、事情により2系を使っています。

まずはプロジェクトにRxLifecycleを導入します。いろいろなモジュールがありますが、とりあえず今回導入したのは以下の2つです。必要に応じて追加してください。

dependencies {
    // RxLifecycle
    implementation 'com.trello.rxlifecycle2:rxlifecycle:2.2.2'
    implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.2'
}

Activityは、RxLifecycleで用意しているRxAppCompatActivityを継承するようにします。Fragmentの場合も同様です。

class MainActivity : RxAppCompatActivity() {
    // 略
}

RxLifecycleの使い方は簡単で、Observableにcomposeを追加して、bindToLifecycle()を呼べばOKです。不思議な力でObservableが自動でdisposeされます。本当にdisposeされるのか不安な場合は、doOnDisposeでログを出力してdisposeされていることを確認しましょう。

@SuppressLint("CheckResult")
private fun subscribe() {
    Observable.interval(1, TimeUnit.SECONDS)
        .doOnSubscribe { Timber.i("doOnSubscribe") }
        .doOnDispose { Timber.i("doOnDispose") }
        .compose(bindToLifecycle())
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({
            // do something here
        }, { throwable ->
            Timber.e(throwable)
        })
}

ところで@SuppressLint(“CheckResult”)がとても鬱陶しいんですが、なんとかならないでしょうか。

以上です。よろしくお願いします。