BehaviorSubject 的 Missing BackPressure 示例是什么?
What is an example of MissingBackPressure for BehaviourSubject?
我有一个 android 应用程序使用 RxJava1.x,偶尔会在使用 BehaviourSubject
时抛出 MissingBackPressure
。
它只发出一个包含对象的列表来填充视图。
behaviourSubject.onNext(items);
但是,重现异常非常困难,所以我尝试编写一个简单的测试如下。
BehaviorSubject<Object> p = BehaviorSubject.create((Object)1);
p.test(0).assertFailure(MissingBackpressureException.class);
有人可以帮忙举个例子吗?谢谢。
Caused by rx.exceptions.MissingBackpressureException
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.onNext(SourceFile:160)
at rx.internal.operators.NotificationLite.accept(SourceFile:135)
at rx.subjects.SubjectSubscriptionManager$SubjectObserver.emitNext(SourceFile:253)
at rx.subjects.BehaviorSubject.onNext(SourceFile:160)
...
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(SourceFile:69)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(SourceFile:77)
at retrofit2.adapter.rxjava.OperatorMapResponseToBodyOrError.onNext(SourceFile:41)
at retrofit2.adapter.rxjava.OperatorMapResponseToBodyOrError.onNext(SourceFile:38)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.request(SourceFile:173)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.request(SourceFile:109)
at rx.Subscriber.setProducer(SourceFile:211)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.setProducer(SourceFile:105)
at rx.Subscriber.setProducer(SourceFile:205)
at rx.Subscriber.setProducer(SourceFile:205)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(SourceFile:102)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(SourceFile:102)
at rx.Subscriber.setProducer(SourceFile:205)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(SourceFile:152)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(SourceFile:138)
at rx.internal.operators.OnSubscribeLift.call(SourceFile:1048)
at rx.Observable.unsafeSubscribe(SourceFile:10256)
at rx.internal.operators.OnSubscribeMap.call(SourceFile:1048)
at rx.Observable.unsafeSubscribe(SourceFile:10256)
at rx.internal.operators.OnSubscribeMap.call(SourceFile:1048)
at rx.internal.operators.OnSubscribeLift.call(SourceFile:1048)
at rx.Observable.unsafeSubscribe(SourceFile:10256)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(SourceFile:100)
at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker.call(SourceFile:230)
at rx.internal.schedulers.ScheduledAction.run(SourceFile:55)
1.x BehaviorSubject
忽略背压并在不考虑任何请求量的情况下发出,因此它永远不会发出信号 MissingBackpressureException
。如果您在日志中看到这样的错误,那是来自另一个操作员;这就是为什么你应该总是 post 失败堆栈跟踪。
我不确定您为什么要针对此异常对 BehaviorSubject
本身进行单元测试,但最接近 MissingBackpressureException
信号的是 PublishSubject
:
BehaviorSubject<Object> bs = BehaviorSubject.create((Object)1);
PublishSubject<Object> ps = PublishSubject.create();
AssertableSubscriber<Object> as = ps.test(0);
bs.subscribe(ps);
as.assertFailure(MissingBackpressureException.class);
我有一个 android 应用程序使用 RxJava1.x,偶尔会在使用 BehaviourSubject
时抛出 MissingBackPressure
。
它只发出一个包含对象的列表来填充视图。
behaviourSubject.onNext(items);
但是,重现异常非常困难,所以我尝试编写一个简单的测试如下。
BehaviorSubject<Object> p = BehaviorSubject.create((Object)1);
p.test(0).assertFailure(MissingBackpressureException.class);
有人可以帮忙举个例子吗?谢谢。
Caused by rx.exceptions.MissingBackpressureException
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.onNext(SourceFile:160)
at rx.internal.operators.NotificationLite.accept(SourceFile:135)
at rx.subjects.SubjectSubscriptionManager$SubjectObserver.emitNext(SourceFile:253)
at rx.subjects.BehaviorSubject.onNext(SourceFile:160)
...
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(SourceFile:69)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(SourceFile:77)
at retrofit2.adapter.rxjava.OperatorMapResponseToBodyOrError.onNext(SourceFile:41)
at retrofit2.adapter.rxjava.OperatorMapResponseToBodyOrError.onNext(SourceFile:38)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.request(SourceFile:173)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.request(SourceFile:109)
at rx.Subscriber.setProducer(SourceFile:211)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.setProducer(SourceFile:105)
at rx.Subscriber.setProducer(SourceFile:205)
at rx.Subscriber.setProducer(SourceFile:205)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(SourceFile:102)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(SourceFile:102)
at rx.Subscriber.setProducer(SourceFile:205)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(SourceFile:152)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(SourceFile:138)
at rx.internal.operators.OnSubscribeLift.call(SourceFile:1048)
at rx.Observable.unsafeSubscribe(SourceFile:10256)
at rx.internal.operators.OnSubscribeMap.call(SourceFile:1048)
at rx.Observable.unsafeSubscribe(SourceFile:10256)
at rx.internal.operators.OnSubscribeMap.call(SourceFile:1048)
at rx.internal.operators.OnSubscribeLift.call(SourceFile:1048)
at rx.Observable.unsafeSubscribe(SourceFile:10256)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(SourceFile:100)
at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker.call(SourceFile:230)
at rx.internal.schedulers.ScheduledAction.run(SourceFile:55)
1.x BehaviorSubject
忽略背压并在不考虑任何请求量的情况下发出,因此它永远不会发出信号 MissingBackpressureException
。如果您在日志中看到这样的错误,那是来自另一个操作员;这就是为什么你应该总是 post 失败堆栈跟踪。
我不确定您为什么要针对此异常对 BehaviorSubject
本身进行单元测试,但最接近 MissingBackpressureException
信号的是 PublishSubject
:
BehaviorSubject<Object> bs = BehaviorSubject.create((Object)1);
PublishSubject<Object> ps = PublishSubject.create();
AssertableSubscriber<Object> as = ps.test(0);
bs.subscribe(ps);
as.assertFailure(MissingBackpressureException.class);