您的位置:网站首页 > IT观察 > 正文

自己动手来实现一个RxJava

类别:IT观察 日期:2018-10-29 3:08:11 人气: 来源:

  近日,Twitter正加大打击虚假和可疑账户的力度,近几个月每天都会逾100万个账户,这是减少该平台上虚假信息的重大转变。Twitter,自去年10月以来,被封账号数量已经翻了一倍多。去年10月分,迫于美国压力,Twitter披露了俄罗斯如何利用虚假账户美国总统的细节。

  在过去和今年的谷歌IO大会上,第一次接触到RxJava时,被其优雅的链式调用风格和强大的操作符深深吸引,RxJava一调用,一气呵成,用很简洁的代码轻松处理复杂的逻辑,一旦喜欢上就爱不释手。不仅如此,RxJvava还能在事件的传递过程中对事件进行各种加工处理,简直无与伦比。后来开始尝试阅读源码,当GET到部分心法要诀时,蓦然回首,原来想要造一个RxJava并不是很难,于是便有了此篇。希望你读完后,能够加深对RxJava的理解,并能深深地喜欢上RxJava。

  网上关于RxJava 的文章很多。这里相关的使用方式不作详细介绍,如果你对基本用法还不熟悉,请先移步:GitHub() 或者 扔物线()

  本篇示例源码Git地址,下载Demo示例一起阅读。本篇涉及到相关源码基于RxJava 2.1.1。

  Event:包装事件发送中的消息,在事件的传递过程中,可以通过操作符对事件进行各种加工(转换,过滤,组合……);

  Observable 负责发出动作事件,这些事件经过一些分发处理流程后,Observer 负责接收对应的事件并消费掉。

  自己总结一下:RxJava 是以观察者模式为核心,可以通过强大的操作符,对事件中的消息进行加工包装,并且可以轻松实现线程调度的一个框架。

  接着再实现角色二,不过这里定义的是一个基类接口,里面只提供了用来关联观察者和被观察者的方法:。

  你或许有些疑问,在传统的观察者模式里面,大都是由直接发出通知事件的,为什么没看到发送事件的方法呢?先不要急,在RxJava里面,其实是通过一个发射器对象,把事件发出去的。那我们接着再看。

  首先通过Observable.create创建一个对象并返回,完成订阅后,再创建一个发射器 对象,通过这个,把事件传递给,于是中生产的事件就分发到了。

  在RxJava源码中,调用后,紧接着会执行类中的方法,接着调用,此时才会开始发事件,通过发射器Emitter把,,发送给被订阅的,从而完成整个事件流的分发处理。

  另外还有重要的一点,我们知道,RxJava拥有逐级订阅的能力,所以每次经过操作符后,返回的必然是一个对象。

  这里真正管事的是,完成订阅后,上一级的对象把事件发给了,又在它的方法里面,把事件消息转换了一下,然后又发送了出去。有没有一种豁然开朗的的感觉……

  完成订阅后,把事件传递给,通过方法,把传入的泛型转成结果,再通过发送给真正的,这样就完成了事件消息的转换和传递;

  我们首先来获取的能力,为了便于理解,这里先把使用的示例代码提前贴出来。可以看到,方法的返回值,一个是,一个是数组,通过这两种数据容器,我们便拥有了两种不同方式装载数据的能力。

  可以看到,我们通过方法,拿到装载n个数据的容器,然后再依次遍历,最后调用真正的的方法,就这样实现了消息“1对n”的转换和发送。

  1.RxJava返回的是一个对象,在里面有一个,在里面有一个,RxJava就是通过这两个容器来装载数据的。

  2.在的实现中,我们是通过apply直接拿到数据容器,在RxJava的源码中有一个和,在中,类型的变量,用来存储被加工后的数据集合,这个变量通过中被赋值,最终仍然是通过遍历操作,把数据再次发送出去。相关的逻辑实现比较复杂,这里就不多述了。

  我们先来获取第2点的能力,这里让暂且n=2,只要你愿意,你让它等于多少都行。先看一下定义的接口:

  RxJava源码中的逻辑实现比较复杂,涉及到的类和接口也比较多。的实现算是一个精简版,但是完全能实现我们想要的功能。

  还有一点需要注意,发送完了两个之后,才开始发送,为什么?因为它俩跑在同一个线程里面!我们接下来就要让它俩在不同的线. 线程调度subscribeOn和observeOn的实现

  的例子中,连续3次调用其实线程也是切换了三次,只不过最后一次切换成了第一个指定的线程,所以只有第一个线. 每次调用

  这个比较好理解,因为每次调用都会影响后面观察者运行的线程,线程改变后,会在新的线程中将数据发送给的。

  结尾RxJava为了保障优雅性,健壮性,源码比这复杂庞大得的多。这里只是抛砖引玉,通过研究别人的轮子,弄懂造轮子的原理,提升自己,然后才能造出更好的轮子。如果你明白了以上操作符的实现原理,那么其它的诸如,,,,等操作符,相信也可以实现了。如果没看懂,也没关系,多看几遍,多动手写写试试,相信你也能体会到RxJava的真正魅力!

  猫石对话

0
0
0
0
0
0
0
0
下一篇:没有资料

相关阅读

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

声明:网站数据来源于网络转载,不代表站长立场,如果侵犯了你的权益,请联系站长删除。

CopyRight 2010-2016 科技创新信息网- All Rights Reserved