【Kotlin/Android/RxJava】observeOn/subscribeOnでスレッドを変更する方法

この記事からわかること

  • Android Studio/KotlinRxJava使い方
  • Schedulerとは?
  • 実行するスレッド変更する方法
  • observeOn/subscribeOnメソッド使い方

index

[open]

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

みんなの誕生日

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

posted withアプリーチ

環境

Schedulerとは?

公式リファレンス:Scheduler

Schedulerとは処理を実行するスレッドを管理するための仕組みです。ネットワークリクエストやCPU負荷の高い計算などバックグラウンドスレッドで実行したい処理やUI更新などのメインスレッドで実行したい処理を適切なスレッドで実行するために重要になってきます。

Schedulerの種類

SchedulerScheduleクラスより提供されており、またRxAndroidを導入することでAndroidSchedulersクラスも使えるようになります。主に使うのは以下の3つかと思います。

スレッドを切り替えるメソッド

RxJavaでスレッドを切り替えるためのメソッドとしてobserveOnsubscribeOnメソッドの2つが用意されています。両者ともObservableオブジェクトからメソッドチェーンで呼び出して使用します。

observeOnメソッド

observeOnObserverが処理を実行するスレッドを指定するためのメソッドです。observeOnメソッドを呼び出した以降の処理のスレッドを明示的に変更することができます。observeOnはチェーン内で複数回の呼び出しが可能でスレッドをこまめに切り替えることができます。

disposable = Observable.create<String> { emitter ->
    emitter.onNext("Hello")
    emitter.onNext("World")
}.observeOn(Schedulers.computation()) // 計算用スレッドに切り替え
    .map { it.length  } // 計算の重い処理
    .observeOn(AndroidSchedulers.mainThread()) // メインスレッドに切り替え
    .subscribe(
        // UI更新処理など
        { length -> Log.e("RxJava", length.toString()) }
    )

subscribeOnメソッド

subscribeOnObservableオブジェクトが処理を実行するスレッドを指定するためのメソッドです。subscribeOnはチェーン内で1回のみ呼び出しが可能です。要するにObservableオブジェクトがデータを生成するスレッドを指定することができるので、APIやDBのCRUD処理などからイベントを発火させている場合などに明示的にバックグラウンドスレッド(IO)を指定することができるようになります。

disposable = Observable.create<String> { emitter ->
    emitter.onNext("Hello")
    // APIやDBなどのCRUD処理
    // ここがIOスレッドで実行される
}.subscribeOn(Schedulers.io())
    .subscribe(
        // 途中で明示的にスレッドを指定(observeOn)しない場合はObservableと同じスレッドになる(IO)
        { length --> Log.e("RxJava", length.toString()) }
    )

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

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

searchbox

スポンサー

ProFile

ame

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

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

New Article

index