web-dev-qa-db-fra.com

Planificateur RxJava à observer sur le thread principal

Si j'écris quelque chose comme ça, alors les deux l'opération et la notification seront sur le thread actuel ...

Observable.fromCallable(() -> "Do Something")
    .subscribe(System.out::println);

Si je fais l'opération sur un thread d'arrière-plan comme celui-ci, alors les deux l'opération et la notification seront sur un arrière-plan thread ...

Observable.fromCallable(() -> "Do Something")
    .subscribeOn(Schedulers.io())
    .subscribe(System.out::println);

Si je veux observer sur le fil principal et faire en arrière-plan dans Android je ferais ...

Observable.fromCallable(() -> "Do Something")
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(System.out::println);

Mais si j'écrivais un programme standard Java, quel est l'équivalent pour indiquer que vous voulez observer sur le thread principal?

15
Eurig Jones

Convertissez le Observable en BlockingObservable via .toBlocking(); cela vous donne des méthodes de blocage pour attendre la fin, obtenir un élément, etc.

6
Tassos Bassoukos

Pour RxJava2, utilisez "blockingSubscribe()"

Flowable.fromArray(1, 2, 3)
                .subscribeOn(Schedulers.computation())
                .blockingSubscribe(integer -> {
                    System.out.println(Thread.currentThread().getName());
                });
8
Dmitry