本文对rxjava最常用的方法进行一部分源码解读,便于大家理解rxjava的工作原理 Rxjava create 调用流程
这里来看Rxjva如何来做线程切换,以及observeOn和subscribeOn的区别
我们先来看observeOn的
- observeOn的本质是lift变换
- lift本质是不考虑背压的unsafeCreate
- 这里来看一下OnSubScribeLift方法实现
结论:这里由上面看出,observeOn的本质是影响Subscribe的调用线程
我们再来看subscribeOn的 本质上也是个create 也是创建一个OnSubscribe
来看下OperatorSubscribeOn 所以 SubscribeOn 和 ObserveOn 切换线程并不是完全像网上所说的那样 SubscribeOn切换前面的方法执行线程 ObserveOn切换后面的方法执行线程 应该是SubscribeOn切换前面的onSubscribe.call()方法的执行线程
而ObserveOn切换他后面Observe方法中OnNext OnComplete登方法切换的线程
至于为什么ObserveOn能够切换map flat等方法的线程而SubscribeOn不行是因为map float后面的action回调是在他们创建的新的Observeable的subscribe方法中回调回来的而不是在onSubscribe.call中
这里是对subscribe的执行方法 他会回调最后一个Observable.java中的onSubscribe的call方法使得rxjava的调用流程就像开始的第一张图那样。
Written with StackEdit.