1.Scheduler 的原理
RxJava 遵循的是线程不变的原则,即:在哪个线程调用 subscribe(),就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件。如果需要切换线程,就需要用到 Scheduler (调度器)。
subscribeOn() 原理图:
subscribeOn()通过操作特定的Scheduler,通知Observable在指定线程执行。
observeOn() 原理图:
ObserveOn()通过操作特定的Scheduler,让Observable指定Observers的执行线程;
如下图所示:
SubscribeOn():指定了事件源将要执行的线程,无论在操作符链的那个位置被调用;因此,不管SubscribeOn()方法调用了多少次,只有离事件源最近的一个会生效,其他都被最近的一个截断了。
ObserveOn():指定的是方法调用以后,Observers所执行的线程。因此,我们可以在操作符链中,多次调用ObserveOn()来切换执行的线程。