RxJava 源码解读分析 from

我们继续,看看observable.from()是怎么回事,from源码如下图。


再来看看OnSubscribeFromArray这个类,如下图


我们发现,OnSubscribeFromArray就是一个OnSubscribe,要实现了call()接口,call()方法中,只是设置了一个新的FromArrayProducer,再来看看child.setProducer()方法,如下图:


由于原始的Subscriber很早就被转换为SafeSubsciber,所以,passToSubscriber为true,setProducer()方法会被执行2遍,但最终还是调用了producer.request()方法,这个producer就是上上图中提到的FromArrayProducer。我们来直接看看request()方法做了什么,如下图:


看到了吧,最终还是for each element in array, do child.onNext(t),从array头到尾,顺序的emit出数据,而这里的child就是原始的Subscriber。

同理,如果是observeOn(scheduler),就是异步的将emit出的数据放到queue队列中,再异步的进行消费处理,这里很自然的有了 “生产者”和“消费者”的概念。

猜你喜欢

转载自blog.csdn.net/collonn/article/details/71172829