【问题标题】:What is the difference between subscribe() and subscribeWith() in RxJava2 in android?android中RxJava2中的subscribe()和subscribeWith()有什么区别?
【发布时间】:2017-12-23 09:02:52
【问题描述】:

android中RxJava2中的subscribe()subscribeWith()有什么区别?这两个函数都用于订阅 Observable 上的 Observer。这两个功能之间的主要区别是什么? 在哪里使用 subscribe 以及在哪里使用 subscribeWith。如果可能,请提供代码示例。

【问题讨论】:

  • 是的,我已经阅读了文档并且我知道他们已经引入了 Disposable 的概念。我想要一个简单易懂的解释。
  • 它的字面意思是:“由于 Reactive-Streams 规范,Publisher.subscribe 返回 void 并且该模式本身在 2.0 中不再有效。为了解决这个问题,E subscribeWith(E subscriber) 方法具有被添加到每个返回其输入订阅者/观察者的基础反应类中。” 这正是回答你的问题。哪一部分你不明白?

标签: java android reactive-programming rx-java2


【解决方案1】:

由于 1.x Observable.subscribe(Subscriber) 返回 Subscription,用户经常将 Subscription 添加到 CompositeSubscription,例如:

CompositeSubscription composite = new CompositeSubscription();

composite.add(Observable.range(1, 5).subscribe(new TestSubscriber<Integer>()));

由于 Reactive-Streams 规范,Publisher.subscribe 返回 void 并且该模式本身不再适用于 2.0。为了解决这个问题,方法 E subscribeWith(Esubscriber) 已添加到每个基本反应类中,该类按原样返回其输入订阅者/观察者。有了前面的两个例子,2.x 的代码现在可以是这样的,因为ResourceSubscriber 直接实现了Disposable

CompositeDisposable composite2 = new CompositeDisposable();

composite2.add(Flowable.range(1, 5).subscribeWith(subscriber));

来源:What's different in [RxJava] 2.0

【讨论】:

  • 这个基本明白了,但是ResourceSubscriber突然莫名出现是怎么回事?你是说在你的例子中,.subscribeWith(subscriber) 中的subscriber 必须是ResourceSubscriber
猜你喜欢
  • 1970-01-01
  • 2021-08-24
  • 2016-04-04
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
相关资源
最近更新 更多