首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RxJava:发布主题doOnSubscribe从不被调用

RxJava是一个在Java虚拟机上实现的响应式编程库,它提供了一种优雅的方式来处理异步事件流和基于事件的编程。RxJava基于观察者模式和迭代器模式,通过使用可观察序列(Observable)和观察者(Observer)来实现异步和事件驱动的编程。

对于给定的问题,当使用RxJava的doOnSubscribe操作符时,可能会遇到doOnSubscribe从不被调用的情况。doOnSubscribe操作符用于在订阅发生时执行一些操作,例如打印日志或进行一些准备工作。如果doOnSubscribe从不被调用,可能是由于以下原因:

  1. 订阅操作没有被执行:在RxJava中,只有当Observable被订阅时,才会触发事件流的开始。如果没有正确执行订阅操作,doOnSubscribe操作符将不会被调用。确保在订阅Observable之前正确执行订阅操作。
  2. Observable没有发出任何事件:如果Observable没有发出任何事件,例如没有调用onNext、onComplete或onError方法,那么doOnSubscribe操作符也不会被调用。确保Observable能够正常发出事件。
  3. 调度器的问题:RxJava允许使用调度器来控制事件流在不同线程之间的切换。如果使用了错误的调度器或配置了错误的线程切换策略,可能会导致doOnSubscribe操作符不被调用。确保正确配置调度器以确保正确的线程切换。

总结起来,当使用RxJava的doOnSubscribe操作符时,如果它从不被调用,需要检查订阅操作是否正确执行,Observable是否发出了事件,以及调度器是否正确配置。

腾讯云提供了一系列与云计算相关的产品和服务,其中包括云服务器、云数据库、云存储、人工智能等。具体推荐的产品和产品介绍链接地址可以根据具体需求和场景进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

RxJava && Agera 源码简要分析基本调用流程(2)

作者:晋中望 接上篇RxJava && Agera 源码简要分析基本调用流程(1)我们"1.订阅过程"、“2.变换过程”进行分析,下篇文章我们继续分析"3.线程切换过程" 3.线程切换过程 从上文中我们知道了...)、orEnd(),我们的数据流会RTermination再次切换为RFlow,以便进行后面的流式调用。...此时,我们可以在结束前按需要选择对数据流进行最后的配置,例如:调用onDeactivation()配置“订阅”到“取消订阅”的过程是否需要继续执行数据流等等。...可以看到,除了 Push event, pull data 这一特点、goLazy的加载模式(本文未介绍)等,依托于较为精简的方法,Agera的流式调用过程同样也能够做到过程清晰,并且上手难度相较于RxJava...源码简要分析基本调用流程(1)

10.4K10

RxJava && Agera 源码简要分析基本调用流程(1)

作者:晋中望 相信很多做Android或是Java研发的同学对RxJava应该都早有耳闻了,尤其是在Android开发的圈子里,RxJava渐渐开始广为流行。...不仅如此,这种基于异步数据流概念的编程模式事实上同样也能广泛运用在移动端这种包括网络调用、用户触摸输入和系统弹框等在内的多种响应驱动的场景。那么现在,就让我们一起分析一下RxJava的响应流程吧。...(本文基于RxJava-1.1.3) 一.用法 首先来看一个简单的例子: [image.jpg] 运行结果为: [image.jpg] 结果中我们不难看出整体的调用流程: 首先通过调用Observable.create...onsubscribe,等等,这个hook是哪里冒出来的?...下篇将继续"线程切换过程"开始分析 文章来源公众号:QQ空间终端开发团队(qzonemobiledev) 相关推荐 下一篇:RxJava && Agera 源码简要分析基本调用流程(2)

9.2K10
  • RxJava再回首

    要在指定的线程来做准备工作,可以使用 doOnSubscribe() 方法。...在这个方法被调用后,Subscriber 将不再接收事件。一般在这个方法调用前,可以使用 isUnsubscribed() 先判断一下状态。...6、线程调度 这是RxJava的一个强大的地方,在不指定线程的情况下, RxJava 遵循的是线程不变的原则,即:在哪个线程调用 subscribe(),就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件...默认情况下, doOnSubscribe() 执行在 subscribe() 发生的线程;而如果在 doOnSubscribe() 之后有 subscribeOn() 的话,它将执行在离它最近的 subscribeOn...Log.d("TAG", "str:" + str); } }); 输出结果s:222 Take 用一个整数n作为一个参数,原始的序列中发射前

    82410

    RxJava之初体验

    1 关键概念 Observable 被观察者:执行操作流程; Observer、Subscriber 观察者:操作流程结束后的调用(异常退出); create、just、from、zip...subscribeOn(Schedulers.io()) // 此处可添加中间处理流程及对象转化操作 .observeOn(AndroidSchedulers.mainThread()).doOnSubscribe...mNewsAdapter.addAll(requestBean.getResult().getData()); } }); } 代码量上看可能并不会比普通实现少多少...通过doOnSubscribe()、OnNext()、OnComplete()和OnError(),我们可以轻松地监听被观察者的运行状态,进行相应的处理; 4....RxJava提供了基于Observable序列实现的异步调用,我们可以在Observable的创建时可以添加多个事件,序列化执行,同时,在操作流程中,可以使用map、flatMap将操作对象做1:1、1

    40530

    Android RxJava+Retrofit完美封装(缓存,请求,生命周期管理)

    对于 RxJava 不是很了解的同学推荐你们看扔物线大神的这篇文章给 Android 开发者的 RxJava 详解一遍看不懂就看第二遍。...然而 onStart()由于在 subscribe()发生时就被调用了,因此不能指定线程,而是只能执行在 subscribe()被调用时的线程。所以onStart并不能保证永远在主线程运行。...千万不要小看了RxJava,与 onStart()相对应的有一个方法 doOnSubscribe(),它和 onStart()同样是在subscribe()调用后而且在事件发送前执行,但区别在于它可以指定线程...默认情况下, doOnSubscribe()执行在 subscribe()发生的线程;而如果在 doOnSubscribe()之后有 subscribeOn()的话,它将执行在离它最近的subscribeOn...可以看到在RxHelper中看到我们调用了两次subscribeOn,最后一个调用也就是离doOnSubscribe()最近的一次subscribeOn是指定的AndroidSchedulers.mainThread

    3.4K11

    一篇文章就能了解Rxjava

    要在指定的线程来做准备工作,可以使用 doOnSubscribe() 方法,具体可以在后面的文中看到。...这样,由被观察者调用了观察者的回调方法,就实现了由被观察者向观察者的事件传递,即观察者模式。 create() 方法是 RxJava 最基本的创造事件序列的方法。...又有好事的(其实还是当初的我)问了:如果我非要调用多次 subscribeOn() 呢?会有什么效果? 这个问题先放着,我们还是 RxJava 线程控制的原理说起吧。...具体看图(不同颜色的箭头表示不同的线程): 图中可以看出,subscribeOn() 和 observeOn() 都做了线程切换的工作(图中的 “schedule…” 部位)。...默认情况下, doOnSubscribe() 执行在 subscribe() 发生的线程;而如果在 doOnSubscribe() 之后有 subscribeOn() 的话,它将执行在离它最近的 subscribeOn

    1.4K31

    RxAndroid完全教程

    from里面拿出每一个,调用flatmap将数据再次包裹起来,变换后再次进入filter进入过滤条件,过滤条件有前后顺序, flatMap 将里面的元素进行每个重新包装,再次作为一个被观察者发送出去。...它会在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。...要在指定的线程来做准备工作,可以使用 doOnSubscribe() 方法,具体可以在后面的文中看到。 3.将传入的 Subscriber 作为 Subscription 返回。...当 RxJava 形式的时候,Retrofit 把请求封装进 Observable ,在请求结束后调用 onNext() 或在请求失败后调用 onError()。...这时候,如果用 RxJava 的形式,就好办多了。

    1.5K90

    RxJava 详解

    前言 我去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 。...'io.reactivex:rxandroid:1.0.1' (版本号是文章发布时的最新稳定版) 另外,感谢 RxJava 核心成员流火枫林的技术支持和内测读者代码家、鲍永章、drakeet、马琳...这个问题先放着,我们还是 RxJava 线程控制的原理说起吧。 2) Scheduler 的原理(二) 其实,subscribeOn()和observeOn()的内部实现,也是用的lift()。...默认情况下,doOnSubscribe()执行在subscribe()发生的线程;而如果在doOnSubscribe()之后有subscribeOn()的话,它将执行在离它最近的subscribeOn(...如上,在doOnSubscribe()的后面跟一个subscribeOn(),就能指定准备工作的线程了。 ---- 四、RxJava 的适用场景和使用方式 1.

    1.8K10

    RxJava2.x 五种观察者和操作符简介

    RxJava 提供了一系列操作符,可以使用它们来过滤(Filter)、选择(select)、变换(transform)、结合(combine)和组合(compose)多个 Observable,这些操作符让执行和复合变得非常高效...RxJava 使用 3 步走: 创建 Observable; 创建 Observer; 使用 subscribe 进行订阅; 因此,这三者缺一不可,只有使用了 subscribe 被观察者才会开始发送数据...onComplete 和 onError 事件,可以看成 Rx 的Runnable Maybe 能够发射 0 或 1个数据,要么成功,要么失败,有点类似于 Optional 2.do 操作符的用途 操作符 用途 doOnSubscribe...onComplete 时会被调用 doFinally 当它产生的 Observable 终止之后被调用,无论是正常终止还是异常终止。...4.just just 是 RxJava 的创建操作符,用于创建一个 Observable,Consumer 是消费者,用于接收单个值。

    75220

    RxJava 辅助操作符

    extends ObservableSource> itemDelay) // 先调用 delaySubscription,然后调用上面的 delay 方法 public final ...{ Log.e("RX", "doOnSubscribe") } // Observable 被订阅后执行 } // 发射 onComplete val observable1 = Observable.create...after emit error onTerminateDetach 在执行 dispose() 解除订阅时,将内部对外部观察者的引用 actual 置为 null,看网上文章主要用于防止内存泄漏问题,因为 RxJava...比如这篇文章:一张图搞定-RxJava2的线程切换原理和内存泄露问题 serialize Observable 可以异步调用观察者的方法,可能是从不同的线程调用。...这可能会让 Observable 行为不正确,它可能会在某一个 onNext 调用之前尝试调用 onCompleted 或 onError 方法,或者两个不同的线程同时调用 onNext 方法。

    2.5K20

    【Android】RxJava的使用(一)基本用法

    需要注意的是,onCompleted() 和onError()二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。...它会在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。...要在指定的线程来做准备工作,可以使用doOnSubscribe()方法,具体可以在后面的文中看到。...在这个方法被调用后,Subscriber将不再接收事件。一般在这个方法调用前,可以使用isUnsubscribed()先判断一下状态。...所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如onPause()onStop()等方法中)调用unsubscribe()来解除引用关系,以避免内存泄露的发生。

    1.2K70

    SpringCloudRPC调用核心原理:RxJava响应式编程框架,观察者模式

    如果不懂RxJava,对于Hystrix和Ribbon的学习就会令人头疼不已。 基础原理讲起:观察者模式 本文的重要特色,基础原理讲起。...图4-2 RxJava通过subscribe()方法实现订阅关系 在RxJava中,Observable和Subscriber之间通过emitter.onNext(...)弹射的方式实现主题的消息发布,...图4-3 RxJava通过emitter.onNext()弹射主题消息 RxJava主题的消息发布方式之一是通过内部的弹射器Emitter完成。...RxJava主题(可观察者)中的Emitter可以不只发布(弹射)一个消息,可以重复使用其onNext()方法弹射一系列消息(或事件),这一系列消息组成一个序列。...本文给大家讲解的内容是SpringCloudRPC远程调用核心原理:RxJava响应式编程框架,基础原理讲起:观察者模式 下篇文章给大家讲解的是SpringCloudRPC远程调用核心原理:RxJava

    50420
    领券