【Kotlin/Android】RxJavaのFlowableの使い方!Observableとの違い

この記事からわかること

  • Android Studio/KotlinRxJava使い方
  • Flowableオブジェクトとは?
  • Observableとの違い
  • バックプレッシャーとは?
  • subscribeByでは動作しない?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Flowableとは?

公式リファレンス:Flowable

RxJavaのFlowableバックプレッシャー機能をサポートしたObservableオブジェクトの1種です。Observableクラスと同じようにデータストリームの中で各イベントを通知し、観測しているObserverが処理を実行します。

Observableクラスとの違いはバックプレッシャー機能をサポートしているかいないかです。

バックプレッシャー機能とは?

バックプレッシャー機能」とはデータフローを制御するためのメカニズムです。流れるデータが膨大な場合や処理速度が重い場合などデータの供給と処理速度が釣り合っていない場合にはメモリ消費が増加し、アプリケーションの性能の低下やクラッシュを引き起こす可能性が孕んできます。

これを防ぐための機能がバックプレッシャー機能であり、具体的にいうとデータの提供スピードをコントロールすることで適切にデータを扱えるようになります。

インスタンスの生成方法

Flowableオブジェクトの生成方法は基本的にObservableクラスと変わず、createjustfromIterableintervalなどを使用します。

おすすめ記事:Observableオブジェクトの生成方法!create/just/fromIterable/intervalメソッドの使い方

バックプレッシャー機能の設定は2つ目の引数でBackpressureStrategy型で指定します。

Flowable.create<String>(
    { emitter ->
        emitter.onNext("Hello")
        emitter.onNext("World")
        emitter.onComplete()
    }, BackpressureStrategy.BUFFER
).subscribe(
    { length ->
        Log.e("RxJava", length.toString())
    },
    { error ->
        Log.e("RxJava", "Error: $error")
    }
).addTo(compositeDisposable)

BackpressureStrategy

BackpressureStrategyとして以下が定義されています。

参考文献:Introduction to RxJava Flowable

subscribeByでは動作しない?

RxKotlinのsubscribeByを使用して購読しようとした場合、正常にFlowableからのイベントを処理することができませんでしたsubscribeByはバックプレッシャー機能をサポートしていないのかもしれません。

Flowable.create<String>(
    { emitter ->
        emitter.onNext("Hello")
        emitter.onNext("World")
        emitter.onComplete()
    }, BackpressureStrategy.BUFFER
).subscribeBy(
    // UI更新処理など
    { length ->
        Log.e("RxJava", length.toString())
    }
).addTo(compositeDisposable)

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index