RxJava subscribeOn and watchOn not redefine the original set of schedulers before?

I used RxJava on android with Retrofit 2, and before subscribing () I called subscribeOn (Schedulers.io ()) android observOn (AndroidSchedulers.mainThread ()). However, sometimes I would like to call subscribeOn (Schedulers.immediate ()) android observOn (Schedulers.immediate ()) to override the installed schedulers to get a synchronized process. But I found that this will not work, the android works will still be processed in the io () thread, the android result is processed by mainThread (). Why?

+4
source share
1 answer

This is how RxJava works.

, 12:50. , , :

Observable.just(1, 2, 3)
    .subscribeOn(Schedulers.newThread())
    .subscribeOn(Schedulers.io())
    .subscribe(System.out::println);

, subscribeOn() . subscribeOn(Schedulers.io()) io. subscribeOn(Schedulers.newThread()) , ( ), . . , , io.

subscribeOn() observeOn(), . Transformer :

Transformer Func1<Observable<T>, Observable<R>>. : Observable , Observable . , inline.

, :

<T> Transformer<T, T> applySchedulers() {  
    return observable -> observable.subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread());
}

, , :

final Transformer schedulersTransformer =  
    observable -> observable.subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread());

@SuppressWarnings("unchecked")
<T> Transformer<T, T> applySchedulers() {  
    return (Transformer<T, T>) schedulersTransformer;
}

:

Observable.just(1, 2, 3)
    .compose(applySchedulers())
    .subscribe(System.out::println);

, .

+6

All Articles