在某些情况下,创建自定义Observable会给情人带来开销。
在RxJava 1.x中,扩展an
Observable和using没有好处,
Observable.create(OnSubscribe)因为它们实际上是相同的。有
不过是,创建一个造福
Observable于中间
比使用 *** 作符
lift()与自定义
Operator。 由于人们倾向于首先发现并实际上 重新实现,或者在意识到 不必要的重新实现之前,会
Observable.create(Emitter, BackpressureStrategy)增加
额外的保护措施的开销。
createjust()range()from()
在RxJava 2.x中,默认方法是扩展
Observable,其他类型
添加源/中间运算符,这可能是最低的开销。受保障的创建方法仍然存在,但有一些小的
投资进入了解协议,就可以避免分配额外的对象,由于
create()由具有
Observer或
Disposable也
实现的接口或延伸的基类的有针对性的外部的技术。
例如,这就是我为Java Swing和RxJava2编写适配器库的方式:
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); } }}
一些
Disposable管理隐藏在一个通用
AbstractEventConsumer类中,并且各个事件处理程序通常必须实现所需的
Listener方法,并在
Dispose上调用适当的
remove方法。
附带说明一下,大多数流行的技术可能已经具有可以使用的
RxJava适配器。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)