java - 是否发出 `onCompleted()` 的性能影响

标签 java rx-java rx-android

我有这样的东西。

Button button = new Button(parent, SWT.PUSH);
PublishSubject<Event> subject = PublishSubject.create();
button.addListener(SWT.Selection, e -> subject.onNext(e));
subject.subscribe(e -> System.out.println("selection=" + e));

如您所见,onCompleted() 永远不会被发出。如果我制作了一堆这样的东西并失去了对它们的控制,它们就会被垃圾收集得很好。

我正在决定是否应该添加这一行:

button.addListener(SWT.Dispose, e -> subject.onCompleted());
据我所知,这只是添加了另一个需要 GC 的匿名类,这似乎是一个糟糕的交易。我这样想对吗?我缺少的发出 onCompleted() 的优势是什么?

最佳答案

在这种情况下,我认为调用 onCompleted 没有任何优势。如果您的可观察对象使用了一些在您完成可观察对象后需要处理的资源,那么我会说您应该传递终止事件或取消订阅。

如果您想在这些情况下保持安全,通常我会取消订阅您订阅的 Subscriber 实例(创建一个实例并保存对其的引用,以便您可以调用 subscriber.unsubscribe ())。

关于java - 是否发出 `onCompleted()` 的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37475249/

相关文章:

Java 继承 - 父级和子级的成员

java - 如果 NotifyDataSetChanged 不在添加数据的循环中,则不会更新

android - AsyncTask 中的可观察/订阅者

android - RxJava2,如何组合多观察结果?

java - 在不创建全新列表类的情况下将 Arraylist 转换为 Observable 列表?

java - 扩展 Java 第三方 API

java - "context"在上下文(不)敏感的分析中到底意味着什么?

android - 使用 RxAndroidBle (rxJava) 将命令列表发送到设备

android - 如何过滤数据分页 3 Android?

java - RxJava flatMap 不交错结果