2016-05-27 40 views
1

我有這樣的事情。發佈`onCompleted()`的性能含義

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'ed,這似乎是一個糟糕的協議。我在想這個權利嗎?發現onCompleted()我缺少的優點?

回答

1

在這種情況下,我沒有看到任何調用onCompleted的優點。如果您的observable使用了一些需要處理的資源,那麼您應該通過終止事件或取消訂閱。

如果您希望在這些情況下安全起見,通常我會取消訂閱您訂購的Subscriber實例(創建一個實例並持有引用,以便您可以撥打subscriber.unsubscribe())。

+0

感謝您輸入戴夫:) –