【Kotlin/Android】RxJavaのandThenメソッドの使い方!順番に処理する方法
この記事からわかること
- Android Studio/KotlinでRxJavaの使い方
CompletableのandThenメソッドの使い方- 非同期処理を順番に実行するには?
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
Operator:andThenメソッドの使い方
RxJavaのCompletableで使用できるOperatorのandThenは非同期処理を順番に処理するためのメソッドです。「非同期処理Aの完了後に非同期処理Bを実行したい」場合などCompletableを直列に繋げたい場合に使用します。Observableの場合はconcatWithメソッドが同じ役割になります。
完了後に実行したい非同期処理をandThenメソッドの引数に渡します。
Log.i("RxJava", "処理開始")
var completable1 = Completable.timer(3, TimeUnit.SECONDS)
var completable2 = Completable.timer(2, TimeUnit.SECONDS)
completable1
.andThen(completable2)
.subscribeBy(
onComplete = {
Log.i("RxJava", "2つとも完了したよ")
}
).addTo(compositeDisposable)
例えば上記の場合は「処理開始」が出力された5秒後(2つの処理が完了後)に「2つとも完了したよ」が出力されることになります。andThenメソッドにCompletableを渡した場合はさらにメソッドチェーンで複数のCompletableを掛け合わせて実装することも可能です。
Log.i("RxJava", "処理開始")
var completable1 = Completable.timer(3, TimeUnit.SECONDS)
var completable2 = Completable.timer(2, TimeUnit.SECONDS)
var completable3 = Completable.timer(4, TimeUnit.SECONDS)
completable1
.andThen(completable2)
.andThen(completable3)
.subscribeBy(
onComplete = {
Log.i("RxJava", "3つとも完了したよ")
}
).addTo(compositeDisposable)
- 処理開始
- 3秒後
- completable1:実行
- completable1:完了
- 2秒後
- completable2:実行
- completable2:完了
- 4秒後
- completable3:実行
- completable3:完了
- 3つとも完了したよ
異なる非同期処理を渡す
andThenメソッドの引数に渡す非同期処理はCompletable以外でも問題ありませんが、Completable以外にすると続けてandThenメソッドは使用できなくなるので注意してください。
var completable1 = Completable.timer(3, TimeUnit.SECONDS)
val observable1 = Observable.just("1")
completable1
.andThen(observable1) // これ以降はandThenメソッドは使えない
.subscribe {
Log.i("RxJava", it)
}.addTo(compositeDisposable)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。






