发出数据的时候在我们指定的线程,收到数据的时候在我们的主线程。
概念:
1,让代码可以在不同的现成执行。
2,subscribeOn——订阅时的线程(自己指定的线程,也就是发射数据的线程)。
3,observeOn——接收时的线程(同样是自己指定的线程)。
4,Scheduler——实际做线程变换(在上面这俩方法中传入的都是Scheduler对象)。
总结:
1,rxjava1和rxjava2都用了Scheduler调度者。
2,rajava1用的是操作符
Operator,rxjava2用的也是操作符那一套AbstractObservableWithUpstream。
线程变换源码分析:
Scheduler身为调度者的变换原理分析及源码
RXJAVA1:
1,Scheduler抽象类
2,Worker——真正做线程调度的类
3,Action0——在线程中执行的操作
4,schedule——实际做线程调度的方法。入参为Action0
Scheduler到底是什么:
作为一个抽象类,里面干活的最重要的就是Worker类
1,传入不同的Scheduler来使用不同的线程
2,用Scheduler创建Worker来使用真正的线程池
3,传入具体的操作Action0
4,通过schedule方法来实现调度,实际上也就是在schedule中将传入的Action0层层包装,最后调用a
ction0.call方法
Android中的Scheduler:
就是先
包装成Massage对象。通过Handler和Looper做到线程之间的调度的。
RXJAVA2:
1,Scheduler抽象类
2,Worker——真正做线程调度的类
3,Runnable——在线程中执行的操作
4,schedule——做线程调度的方法,入参为Runnable
白话:也就是将我们传入的Runnable在NewThreeWorker中包装几次,最后还是个runable,之后再扔进对应的线程池中执行。
Android中的Scheduler:
将其包装成message对象,通过handler放入mainLooper中去执行。不一定非要是main线程