美文网首页
Rxjava小结

Rxjava小结

作者: 吴小博Toby | 来源:发表于2019-05-04 14:45 被阅读0次

by hzwusibo  20190504

http://gank.io/post/560e15be2dca930e00da1083?from=timeline&isappinstalled=0#toc_1

RxJava :异步。

好在:  简洁。

RxJava 是通过一种扩展的观察者模式来实现异步的。

优雅的实现方法 - 基于事件流的链式调用

flatMap() 和 map() 有一个相同点:它也是把传入的参数转化之后返回另一个对象。但需要注意,和 map()不同的是, flatMap() 中返回的是个 Observable 对象,并且这个 Observable 对象并不是被直接发送到了 Subscriber 的回调方法中。

 flatMap() 的原理是这样的:

1. 使用传入的事件对象创建一个 Observable 对象;

2. 并不发送这个 Observable, 而是将它激活,于是它开始发送事件;

3. 每一个创建出来的 Observable 发送的事件,都被汇入同一个 Observable ,而这个 Observable 负责将这些事件统一交给 Subscriber 的回调方法。

这三个步骤,把事件拆成了两级,通过一组新创建的 Observable 将初始的对象『铺平』之后通过统一路径分发了下去。而这个『铺平』就是 flatMap() 所谓的 flat。

subscribeOn() 原理图

observeOn() 原理图:

从图中可以看出,subscribeOn() 和 observeOn() 都做了线程切换的工作(图中的 "schedule..." 部位)。不同的是, subscribeOn()的线程切换发生在 OnSubscribe 中,即在它通知上一级 OnSubscribe 时,这时事件还没有开始发送,因此 subscribeOn() 的线程控制可以从事件发出的开端就造成影响;而 observeOn() 的线程切换则发生在它内建的 Subscriber 中,即发生在它即将给下一级 Subscriber 发送事件时,因此 observeOn() 控制的是它后面的线程。

subscribeOn(): 指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。 * observeOn(): 指定 Subscriber 所运行在的线程。或者叫做事件消费的线程。

io 和 newThread()区别:

Schedulers.io(): I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。

行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。

不要把计算工作放在 io() 中,可以避免创建不必要的线程。

 lift原理:

在 Observable 执行了 lift(Operator) 方法之后,会返回一个新的 Observable,这个新的 Observable 会像一个代理一样,负责接收原始的 Observable 发出的事件,并在处理后发送给 Subscriber。

相关文章

  • Rxjava小结

    by hzwusibo 20190504 http://gank.io/post/560e15be2dca930e...

  • 希望是最全的RxJava2使用场景小结

    因为之前是看可能是东半球最全的RxJava使用场景小结来学习RxJava的,由于升级2.0版本部分API已经替换。...

  • rxjava使用小结

    1.延迟请求 延迟n秒后再去请求 然后使用flatmap转换 2.轮询请求-无限轮询 3.轮询请求-限定次数轮询 ...

  • RxJava使用小结

    RxJava已经更新到2.x版本,和1.x版本差别有点大,建议直接使用2.x版本 compile 'io.rea...

  • RxJava线程小结

    参考 https://www.jianshu.com/p/73c207844bb4https://blog.csd...

  • RxJava学习总结_思维导图

    RxJava学习小结: 思维导图源文件 http://pan.baidu.com/s/1o8u4Vvs

  • Android主流框架学习资料

    Android 开发小工具之:注解 Annotation 可能是东半球最全的RxJava使用场景小结 Androi...

  • RxJava操作符小结

    操作符参考链接: https://mcxiaoke.gitbooks.io/rxdocs/content/Oper...

  • Rxjava知识点小结

    Rxjava中涉及到两个重要的角色,一:被观察者 二:观察者,我们知道当被观察者和观察者绑定后,被观察者就可以发...

  • RxJava操作符小结

    本篇基于RxJava中文文档https://mcxiaoke.gitbooks.io/rxdocs/content...

网友评论

      本文标题:Rxjava小结

      本文链接:https://www.haomeiwen.com/subject/debxoqtx.html