Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RxJava1 concatMap导致缺少背压异常_Android_Kotlin_Rx Java - Fatal编程技术网

Android RxJava1 concatMap导致缺少背压异常

Android RxJava1 concatMap导致缺少背压异常,android,kotlin,rx-java,Android,Kotlin,Rx Java,我正在尝试使用concatMap转换可观测值,因为顺序对我的案例很重要 @Test fun load_data() { val sub = TestSubscriber<Long>() var s = BehaviorSubject.create<Long>() s.concatMap { Observable.timer(it, TimeUnit.MILLISECONDS) } .take(4) .su

我正在尝试使用
concatMap
转换可观测值,因为顺序对我的案例很重要

@Test
fun load_data() {
    val sub = TestSubscriber<Long>()

    var s = BehaviorSubject.create<Long>()

    s.concatMap {
        Observable.timer(it, TimeUnit.MILLISECONDS)
    }
    .take(4)
    .subscribe(sub)

    s.onNext(5)
    s.onNext(6)
    s.onNext(7)
    s.onNext(8) //rx.exceptions.MissingBackpressureException

    sub.awaitTerminalEvent(500, TimeUnit.MILLISECONDS)
    sub.assertNoErrors()
}
@测试
乐趣加载_数据(){
val sub=TestSubscriber()
var s=BehaviorSubject.create()
s、 海图{
可观察计时器(it,TimeUnit.ms)
}
.take(4)
.订阅(sub)
s、 onNext(5)
s、 onNext(6)
s、 onNext(7)
s、 onNext(8)//rx.exceptions.MissingBackpressureException
sub.awaitTerminalEvent(500,时间单位毫秒)
子资产无错误()
}
我已经将实际数据加载更改为
Observable.timer()
,以简化示例并使其更易于复制

我在app
BehaviorSubject
中使用将UI操作与rx链接起来

从中,特别是从大理石图中,我希望它将项目存储在队列中并逐个转换它们

然而,
concatMap
似乎只将队列大小设置为2个项目。添加更多项目会导致缺少背压异常

因此,我有以下问题:

  • 为什么
    concatMap
    的队列大小为2而不是
    RxRingBuffer.size
    as 其他运营商有吗
  • 通常,我应该在之前添加任何
    onBackpressure*
    操作符吗 调用
    concatMap
    以防止
    missingBackpressureeException
    例外

  • 在回答这些问题之前,请考虑切换到RXJava 2,这不是“代码>可观察的< /代码>问题。

    为什么concatMap的队列大小为2,而不是像其他运算符那样的RxRingBuffer.size

    操作员一次运行一个可观察的
    ,没有理由预先预取超过1个

    在调用concatMap之前,我是否应该添加onBackpressure*操作符,以防止遗漏backpressureeexception异常


    是。

    是的,rxJava2不应该缺少BackPressureException,但是由于代码库太大,迁移将非常耗时。