我有这样的东西。
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/