发出`onCompleted()`的性能含义与否

时间:2016-05-27 05:06:53

标签: 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()我失踪的任何好处?

1 个答案:

答案 0 :(得分:1)

在这种情况下,我认为调用onCompleted没有任何好处。如果你的observable使用了一些你需要处理的资源,一旦你完成了observable,那么我会说你应该传递一个终止事件或取消订阅。

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