Rxjava学习使用

阅读: 评论:0

Rxjava学习使用

Rxjava学习使用

对于Rxjava的学习使用(一)

之前看了过网上的 吴拉丁大神 写的相关文章。自己在总结一下,方便以后复习、查看。

原文链接:

《关于RxJava最友好的文章》

《关于RxJava最友好的文章————进阶》

最初还是提供一个 开关 与 台灯的例子。

//创建一个被观察者(开关)

Observable switcher&#ate(new Observable.OnSubscribe<String>(){@Overridepublic void call(Subscriber<? super String> subscriber) {Next("On");Next("Off");Next("On");Next("On");Completed();}});

//创建一个观察者(台灯)

     Subscriber light=new Subscriber<String>() {@Overridepublic void onCompleted() {//被观察者的onCompleted()事件会走到这里;Log.d("DDDDDD","结束观察...n");}@Overridepublic void onError(Throwable e) {//出现错误会调用这个方法}@Overridepublic void onNext(String s) {//处理传过来的onNext事件Log.d("DDDDD","handle this---"+s)}

//订阅

        switcher.subscribe(light);

流程图

“ate(new Observable.OnSubscribe<String>()” 中的 OnSubscribe 是链接“台灯”和“开关”的关键

理解的关键步骤

  • 订阅这个动作,实际上是观察者(subscriber)对象把自己传递给被观察者(observable)内部的onSubscribe。
  • onSubscribe的工作就是调用call(subscriber)来通知被观察者发送消息给这个subscriber。

  • 以上的结论对于下面我们理解操作符的原理十分有帮助,因此一定要看明白。

操作符的理解

按 map 操作符举例

     public final <R> Observable<R> map(Func1<? super T, ? extends R> func){ //创建了全新代理的的Observable,构造函数传入的参数是OnSubscribe //OnSubscribeMap显然是OnSubscribe的一个实现类, //也就是说,OnSubscribeMap需要实现call()方法 //构造函数传入了真实的Observable对象 //和一个开发者自己实现的Func1的实例 return create(new OnSubscribeMap<T, R>(this, func)); }
  • 1 他会将传入的参数交给他 特定的‘观察者’实现类—->
  • 2 在这个实现类的 call 方法中将参数传给一个内部的代理类,在将这个代理类添加到‘观察者’的SubscriptionList集合中(应该是用来处理多个代理类的)—>
  • 3 让外部的‘被观察者’去订阅者代理类。

理解的流程图

对流程图的描述
1 通过调用“被观察者”的 .subscribe() 方法发起订阅 –> 来到了 “被观察者”的唯一属性onSubscribe –>调用 onSubscribe.call()方法,将我们自己创建的‘观察者’传进call(),现在真正发送了事件!
2 在call 方法中传进去的 ‘观察者’ 转换成‘代理观察者’—> 让外部的‘被观察者’,来订阅这个‘代理观察者’
3 通过onNext(),将参数回调给“代理观察者”。
4 在通过onNext(),将参数回调给“观察者”,就可以将在这里拿到的参数,进行需要的操作了。
  • 实际上看源码 可能由于版本的关系 和原作者贴的源码不太一样,就先这么理解吧。

下一篇准备学习各种 操作的使用

本文发布于:2024-01-29 08:01:48,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170648651313849.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Rxjava
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23