RxJava中的线程转换主要通过下面两个方法:
1.subscribeOn
2.observeOn
一、subscribeOn
1.调用一次subscribeOn时:
Observable observable;
Schedulers schedulers;
Observer observer;
observable.subscribeOn(schedulers).subscribe(observer)
通过解析源码可转化为:
observer.onSubscribe();
schedulers线程{observable.subscribe(observer)
}
在原线程调用observer的onSubscribe 方法,并在schedulers的线程中调用observable 的subscribe 方法。
2.当多次调用subscribeOn时:
Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.subscribeOn(schedulers1).subscribeOn(schedulers2).subscribe(observer)
可转化为:
observer.onSubscribe();
schedulers2线程{schedulers1线程{observable.subscribe(observer)}
}
所以subscribOn只有第一次有效。
二、observeOn
1.调用一次observeOn
Observable observable;
Schedulers schedulers;
Observer observer;
observable.observeOn(schedulers).subscribe(observer)
可转化为:
observer.onSubscribe();
schedulers线程{observer.next()observer.complete()
}
当多次调用observeOn时:
Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.observeOn(schedulers1).observeOn(schedulers2).subscribe(observer)
可转化为:
observer.onSubscribe();
schedulers1线程{schedulers2线程{observer.next()observer.complete()}
}
当时用map操作符时:
observable.map().observeOn(schedulers1).map(function).observeOn(schedulers2).subscribe(observer)
可转化为:
observer.onSubscribe();
schedulers1线程{function.apply()schedulers2线程{observer.next()observer.complete()}
}