Rxjava初步理解

来源:互联网 发布:淘宝卖刀具 编辑:程序博客网 时间:2024/06/17 07:20

本质就是通过回调实现

Observable被观察对像 成员变量onSubscribe

Subscriber 观察对象

订阅:

Observable.subscribe先调用Subscriber.onStart() 然后调用onSubscribe中的Call方法,然后在Call方法中调用Subscriber.onNext,Subscriber.onCompleted

,subscriber.onError


Map操作符: 对以前的subscriber的封装,在mapObservable中的call方法中进行封装

Observable<T> source原先的Observable

Observable mapObservable现在的Observable

OnSubscribe--->OnSubscribeMap

Subscriber --->MapSubscriber对目标subscriber的包装

订阅:mapObservable.subscribe

先调用OnSubscribeMap中的call,然后call方法中根据Subscriber生成MapSubscriber,然后source.unsafeSubscribe,source中的OnSubscribe就会调用MapSubscriber

中的onStart onNext onError方法,然需 MapSubscriber中相应的方法会先完成自己的转换,然后调用以前Subscriber 方法


subscribeOn(AndroidSchedulers.mainThread()) 

AndroidSchedulers.mainThread()得到一个mainThreadScheduler由LooperScheduler创建

AndroidSchedulers提供一个工作的线程,调用OperatorSubscribeOn中的call方法创建新的SubscribeOnSubscriber。SubscribeOnSubscriber对原来的subscriber进行简单的代理并取消工作线程的的订阅

subscribeOn会创建一个新的Observable命名为OperatorObservable
Observable<T> source原先的Observable
SubscribeOn----->OperatorSubscribeOn<T>(source, scheduler, requestOn)
订阅:
OperatorObservable.subscribe调用OperatorSubscribeOn中的call方法
1、根据scheduler创建Worker取名为innersource.onSubscribe具体工作的线程)
2、创建SubscribeOnSubscriber取名parent (使现了Subscriber与Action接口) 对原始的Subscriber的简单的包装
3、执行inner.schedule(parent);
执行会调会在Worker所在的线程中调用parent中的call方法,然后调用source.unsafeSubscribe(SubscribeOnSubscriber),接着调用source.onSubscribe中的Call方法。
这样就实现了onSubscribe执行线程的切换。


原创粉丝点击