J'apprends juste Rx-java et Rxandroid2 et je ne sais pas quelle est la différence majeure entre SubscribeOn et ObserveOn.

52
Rathore 8 juil. 2017 à 12:41

2 réponses

Meilleure réponse

SubscribeOn spécifie le planificateur sur lequel un observable fonctionnera. ObserveOn spécifie le planificateur sur lequel un observateur observera cet observable.

Donc, fondamentalement, SubscribeOn est principalement abonné (exécuté) sur un thread d'arrière-plan (vous ne voulez pas bloquer le thread d'interface utilisateur en attendant l'observable) et aussi dans ObserveOn vous voulez observer le résultat sur un thread principal ...

Si vous êtes familier avec AsyncTask, alors SubscribeOn est similaire à la méthode doInBackground et ObserveOn à onPostExecute ...

72
Kubicko 8 juil. 2017 à 10:39

Si quelqu'un trouve la description rx java difficile à comprendre (comme moi par exemple), voici une explication pure java:

SubscribeOn ()

Observable.just("something")
  .subscribeOn(Schedulers.newThread())
  .subscribe(...);

Équivaut à:

Observable observable = Observable.just("something");
new Thread(() -> observable.subscribe(...)).start();

Puisque Observable émet des valeurs sur subscribe() et qu'ici subscribe() va dans le thread séparé, les valeurs sont également émises dans le même thread que subscribe(). C'est pourquoi il fonctionne "en amont" (influence le thread pour les opérations précédentes) et "en aval".

ObserveOn ()

Observable.just("something")
  .observeOn(Schedulers.newThread())
  .subscribe(...);

Équivaut à:

Observable observable = Observable.just("something")
  .subscribe(it -> new Thread(() -> ...).start());

Ici Observable émet des valeurs dans le thread principal, seule la méthode d'écoute est exécutée dans le thread séparé.

10
Lukasz Frankowski 22 mai 2019 à 18:07