gpt4 book ai didi

java - 自定义 Observable 与 Observable.create()?

转载 作者:行者123 更新时间:2023-11-30 06:06:37 30 4
gpt4 key购买 nike

我正在致力于将监听器包装到 Observables 中。通常我们使用 Observable.create() 来包装它,但有些库更喜欢使用自定义 Observables 并将其包装在其中,例如 RxBinding,甚至 RxJava 本身(来自据我了解,操作符基本上是创建新的自定义Observable来在其中进行操作)。

所以我的问题是:我们可以从自定义 Observable 中获得什么好处?它的开销比 Observable.create() 低,因为我们没有生成另一个 ObservableCreate 来覆盖 ObservableSource

我应该使用哪个将现有库包装成 Rx 样式(例如:Firebase)?

最佳答案

在某些情况下,创建自定义 Observables 会带来额外的开销。

在 RxJava 1.x 中,扩展 Observable 没有任何好处。并使用 Observable.create(OnSubscribe)因为它们实际上是相同的。然而,创建 Observable 是有好处的。对于中间运算符,而不是使用 lift()与定制OperatorObservable.create(Emitter, BackpressureStrategy)额外的保护措施会增加开销,因为人们往往会发现create首先并且实际上重新实现just() , range()from()在意识到没有必要之前就使用它。

在RxJava 2.x中,默认的方式是扩展Observable以及添加源/中间运算符的其他类型,这是可能的最低开销。 protected 创建方法仍然存在,但只需在理解协议(protocol)上进行一些小投入,您就可以避免由于create()而分配额外的对象。通过拥有 ObserverDisposable还实现接口(interface)或扩展目标外部技术的基类。

例如,这就是我为 Java Swing 和 RxJava 2 编写适配器库的方式:

final class ActionEventObservable extends Observable<ActionEvent> {

final AbstractButton widget;

ActionEventObservable(AbstractButton widget) {
this.widget = widget;
}

@Override
protected void subscribeActual(Observer<? super ActionEvent> observer) {
AbstractButton w = widget;
ActionEventConsumer aec = new ActionEventConsumer(observer, w);
observer.onSubscribe(aec);
w.addActionListener(aec);
if (aec.get() == null) {
w.removeActionListener(aec);
}
}

static final class ActionEventConsumer
extends AbstractEventConsumer<ActionEvent, AbstractButton>
implements ActionListener {

private static final long serialVersionUID = -3605206827474016488L;

ActionEventConsumer(Observer<? super ActionEvent> actual, AbstractButton widget) {
super(actual, widget);
}

@Override
public void actionPerformed(ActionEvent e) {
actual.onNext(e);
}

@Override
protected void onDispose(AbstractButton component) {
component.removeActionListener(this);
}
}
}

一些一次性管理隐藏在公共(public)AbstractEventConsumer中类和各个事件处理程序大多必须实现所需的 Listener并在处理时调用适当的删除方法。

顺便说一句,大多数流行的技术可能已经有您可以使用的 RxJava 适配器。

关于java - 自定义 Observable 与 Observable.create()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43658234/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com