苹果汁流水线:
1,将苹果一个一个放上履带。也就是new了一个包含苹果对象的集合,在subscribe方法中for循环这个【苹果集合一个一个的发出去。
2,可以在subscribe的onNext中一个一个的接受到。
什么是操作符:
获取到发射的数据进行处理,得到想要的结果之后再发射出去。
Rxjava2操作符:
1,Function接口
2,AbstractObservableWithUpstream抽象类。
其实操作符就相当于我们现实生活中的寄信操作,需要把信给邮局,通过邮局发出去。操作符就是邮局。
操作符变换的原理
lift操作:源码分析
lift操作:源码分析
1,接收原Onsubscribe和当前的Operator。
2,创建一个新的Onsubscribe并返回新的Onsubscribe
3,用新的Subscriber包裹就的Subscriber
4,在新的Subscriber里昨晚变换再传给旧的Sunscriber
类似于代理机制,类似于现实生活中的寄快递,快递员的操作就是lift的操作。
rxjava2的操作符源码分析:
AbstractObservableWithUpstream说明
1,继承此类
2,利用其subscribeActual方法
3,用原Observable去subscribe变换后的Observer
rxjava2中map操作符的原理和rxjava1的map操作符实现原理是一样的,只不过是写法上面有区别。
Operator操作符
Operator接口:(rxjava1)
1,是操作符的抽象接口
2,是各操作符实现Operator接口用于处理具体的变换,并且调用lift操作符
eg:map操作符
1,最基本最简单的操作符。
2,顾名思义,用于做映射。
MapOperator中做了什么:
因为操作符就是为了做变换的,map也不例外,在map中实际上是调用了lift方法,lift方法的参数传入了Operator接口,Operator是实现了func1接口的,func1中实现了call方法。
调用的call方法返回的是一个MapReceiver对象。
MapReceiver继承了Receiver,重写了onComplated() onError() onReceiver()方法。
onReceiver()中调用了call方法,将传递过来的数据做处理再传回去。
rxjava2的操作符实战:
无背压版本
先说一个关键类:CallerWithUpstream
1,一个抽象类
2,有callActual方法
3,实现操作符需实现此方法
实现原理:在map方法中返回的是一个CallerMap对象,CallerMap继承了CallerWithUpstream,其中通过callActual方法调用了call方法,调用了做变换的callee方法。。
CallerOperator接口
1,在callActual中做变换
2,可用于扩展操作符
有背压版本的操作符实战:
TelephonerWithUpstream
1,一个抽象类
2,有callActual方法
3,实现操作符需实现此方法
TelephonerOperator接口
1,在callActual中做变换
2,可用于扩展操作符
操作符提现的是响应式编程思想的变换传播,变换之后还能向下传播
所谓的操作符去变换数据或者处理数据,就是拿到当前的数据去做处理,之后因为持有原有对象,直接通过原有对象去调用处理之后的结果,达到了变换的目的