1. ホーム
  2. java

[解決済み] Rxandroid SubscribeOnとObserveOnの違いは何ですか?

2023-04-29 22:18:47

質問

Rx-javaとRxandroid2を勉強しているのですが、SubscribeOnとObserveOnの大きな違いは何でしょうか?

どのように解決するのですか?

万が一 を見つけた場合 は専門用語だらけです。

tl;dr

 Observable.just("Some string")                 
           .map(str -> str.length())              
           .observeOn(Schedulers.computation())   
           .map(length -> 2 * length)   
           .observeOn(AndroidSchedulers.mainThread())
           .subscribeOn(Schedulers.io())
           .subscribe(---)

observableを観測する...map関数をobsoleteで実行する。 IO スレッドでマップ関数を実行します(私たちは "subscribingOn" スレッドであるため)...今度は 計算スレッド を実行し map(length -> 2 * length) 関数を実行します... そして最後に、出力を ( observeOn() ) メイン のスレッドになります。

とにかく ,

observeOn() は、単にすべての演算子のスレッドをさらに変更します。 下流 . 人々は通常、この 誤解 それは observeOn としても機能します。 上流 として動作しますが、そうではありません。

以下の例では、よりよく説明されます...

Observable.just("Some string")                  // UI
       .map(str -> str.length())               // UI
       .observeOn(Schedulers.computation())   // Changing the thread
       .map(length -> 2 * length)            // Computation
       .subscribe(---)

subscribeOn() のみ 影響力 Observableが購読されるときに使われるスレッドで、その下流に留まります。

Observable.just("Some String")              // Computation
  .map(str -> str.length())                // Computation
  .map(length -> 2 * length)              // Computation
  .subscribeOn(Schedulers.computation()) // -- changing the thread
  .subscribe(number -> Log.d("", "Number " + number));// Computation

位置は関係ない( subscribeOn() )

なぜか? それは に影響するからです。 にしか影響しないからです。

とのコンタクトに従うメソッド subscribeOn

-> 基本的な例: Observable.create

の中で指定されたすべての作業は create で指定されたスレッドで実行されます。 subscribeOn .

もう一つの例です。 Observable.just , Observable.from または Observable.range

注意 これらのメソッドはすべて値を受け取るので、subscribeOnはそれに影響しないので、それらの値を作成するためにブロッキングメソッドを使用しないでください。

もし、ブロッキング関数を使いたい場合は

Observable.defer(() -> Obervable.just(blockingMenthod())));

重要な事実

subscribeOnは Subjects

複数 subscribeOn :

のインスタンスが複数ある場合 subscribeOn が存在する場合、ストリーム中の 最初の のみが実用的な効果を持ちます。

<ブロッククオート

サブスクライブ・アンド・アンプ subscribeOn

人々はこう考える subscribeOn とは何か関係があるのでしょうか? Observable.subscribe とは関係がありますが、特に関係ありません。 サブスクリプションフェーズにのみ影響する .

ソース : Tomek Polański ( ミディアム )