Rx操作符

作者: zyyoona7 | 来源:发表于2016-04-14 10:11 被阅读153次

RxJava的操作符太多了,详细的各个操作符的解释可以直接看文档ReactiveX/RxJava文档中文版,这里记录一些操作符的注意。

1.doOnSubscribe()操作符和subscriber.onStart()

这两个方法都是在开始发送事件之前执行,subscriber.onStart()要优先doOnSubscribe()执行。这两个方法不同的地方在于onStart()是回调方法,而doOnSubscribe()是操作符。
相信大家在看给 Android 开发者的 RxJava 详解这篇文章的时候都看到了作者对这两个方法的介绍

onStart(): 这是 Subscriber增加的方法。它会在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。需要注意的是,如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程执行), onStart() 就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用 doOnSubscribe()方法,具体可以在后面的文中看到。

而与 Subscriber.onStart()
相对应的,有一个方法 Observable.doOnSubscribe()。它和 Subscriber.onStart()同样是在 subscribe()调用后而且在事件发送前执行,但区别在于它可以指定线程。默认情况下, doOnSubscribe() 执行在 subscribe() 发生的线程;而如果在 doOnSubscribe()之后有 subscribeOn() 的话,它将执行在离它最近的 subscribeOn()
所指定的线程。

这是作者的介绍,这里主要说的是onStart()和doOnSubscribe()这两个方法执行的线程,我用的是目前最新版compile 'io.reactivex:rxandroid:1.2.1'compile 'io.reactivex:rxjava:1.1.6'。经过本人的亲测,onStart()和doOnSubscribe()方法默认的执行线程为主线程,onStart()不可以指定线程,doOnSubscribe()可以通过subscribeOn()(放在doOnSubscribe的下面)指定线程。 具体代码就不贴了,大家可以自己尝试一下~

2.observeOn()和subscribeOn()使用和区别以及注意事项

  • 下面提到的“操作”包括产生事件、用操作符操作事件以及最终的通过 subscriber 消费事件
  • 只有第一subscribeOn() 起作用(所以多个 subscribeOn() 毛意义)
    这个 subscribeOn() 控制从流程开始的第一个操作,直到遇到第一个 observeOn()
  • observeOn() 可以使用多次,每个 observeOn() 将导致一次线程切换(),这次切换开始于这次 observeOn() 的下一个操作
  • 不论是 subscribeOn() 还是 observeOn(),每次线程切换如果不受到下一个 observeOn() 的干预,线程将不再改变,不会自动切换到其他线程
    两篇关于observeOn()和subscribeOn()的文章:
    迷之RxJava (三)update 2 —— subscribeOn 和 observeOn 的区别
    [译]在正确的线程上观察

不定期更新......

相关文章

  • Rx操作符

    RxJava的操作符太多了,详细的各个操作符的解释可以直接看文档ReactiveX/RxJava文档中文版,这里记...

  • rx操作符

    按功能进行分类 Operators By Category 1.创建Observable Create —以编程方...

  • Rxjava2的操作符 三

    概述:RX的操作符确实不少,本篇将介绍剩余的操作符。 5. 过滤操作符 5.1 filter()通过一定逻辑来过滤...

  • RxJava学习之转换型操作符

    RxJava学习之转换型操作符 标签(空格分隔): RX系列 转换型操作符 下面展示了可用于Observable发...

  • RxSwift文档六(单元测试)

    单元测试 测试自定义操作符 RxSwift用RxTest为所有操作符测试,位于Rx.xcworkspace项目内的...

  • Android架构师RX响应式编程——Rxjava实战项目教学

    RX定义 Rx是一个函数库,让开发者可以利用可观察序列和LINQ风格查询操作符来编写异步和基于事件的程序 Rx是微...

  • RxJS系列教程(九) 操作异步流

    Rx,不管你是JS,Java,Python还是Swift,玩的就是操作符。每个操作符怎么用,官方文档写得不能再清楚...

  • Rx - compose()操作符

    转自: 【Android】勤用RXJava compose操作符消除重复代码 使用Rxjava的compose()...

  • Rx常用操作符

    常用操作符 Observable.from() 它接收一个集合作为输入,然后每次输出一个元素给subscriber...

  • Rx转换操作符

    map操作符 被观察者数据源泛型,当发射器的数据类型和观察者数据类型不同时,通过map操作符转换,可以将上游发射的...

网友评论

    本文标题:Rx操作符

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