J'ai des doutes concernant le fonctionnement de l'opérateur subscribeOn
. J'ai lu un article à ce sujet.Comment fonctionne subscribeOn
Le observeOn
est assez facile à comprendre, il ne change que le downstram, et changer affecte à tous les downstream
.
Mais comme dit dans l'article subscribeOn can be put in any place in the stream because it affects only the time of subscription.:
Pour comprendre cela, je l'ai fait un samlpe et essayé connecter le fil à chaque point de temps.
Observable.just("Hello")
.map(s -> {
Log.d(TAG, s + " in " + Thread.currentThread());
return 1;
})
.subscribeOn(Schedulers.newThread())
.map(integer -> {
Log.d(TAG, integer + " in " + Thread.currentThread());
return true;
})
.map(aBoolean -> {
Log.d(TAG, aBoolean + " in " + Thread.currentThread());
return 11.0;
})
.subscribeOn(Schedulers.computation())
.subscribe(aDouble -> {
Log.d(TAG, "accept in " + Thread.currentThread());
Log.d(TAG, "accept: " + aDouble);
});
Le résultat est
Hello in Thread[RxNewThreadScheduler-1,5,main]
1 in Thread[RxNewThreadScheduler-1,5,main]
true in Thread[RxNewThreadScheduler-1,5,main]
accept in Thread[RxNewThreadScheduler-1,5,main]
accept: 11.0
Ici, je suis deux fois l'application subscribeOn
, mais à chaque fois que le premier a ajouté un semble être appliqué tout au long du cours d'eau.
Quelqu'un peut-il s'il vous plaît expliquer en termes simples comment cela fonctionne réellement, puisque je suis un débutant et difficile à digérer cela!
Merci à l'avance
si je me souviens bien, 'subscribeOn' décrit le début, i.e. thread qui commencera les émissions. seul le premier sera utilisé s'il y a plusieurs déclarations. –
le 'subscribeOn' le plus proche des gains observables. la seconde est ignorée – Raghunandan
SubscribeOn sera utilisé pour créer l'observable. La création n'est donc possible qu'à partir du thread, donc seulement subscribeOn est possible pour un observable. –