[英]How to get notified of a observer's dispose action in a custom Observable in RxJava2
在此線程中 ,提出了一個有關如何觀察取消訂閱事件的問題,以便您可以在取消訂閱之后清理並刪除該監聽器。 但是,在RxJava2中,上述線程的方法不再起作用。
def myObservable = Observable.create({ aEmitter ->
val listener = {event ->
aEmitter.onNext(event);
}
existingEventSource.addListener(listener)
// Fails since aEmitter doesn't have an add() method nor does Subscriptions exist.
aEmitter.add(Subscriptions.create(() -> existingEventSource.removeListener(listener)));
})
在RxJava2中解決此問題的正確方法是什么?
請查看stringObservable Observable,如何處理訂閱。
public class MyTest {
@Mock private MyService mock;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void nam3e() {
ArrayList<Listener> listeners = new ArrayList<>();
doAnswer(
invocation -> {
Object[] args = invocation.getArguments();
Listener arg = (Listener) args[0];
listeners.add(arg);
return null;
})
.when(mock)
.addListener(any());
Observable<String> stringObservable =
Observable.create(
e -> {
Listener listener =
s -> {
e.onNext(s);
};
mock.addListener(listener);
e.setCancellable(
() -> {
mock.removeListener(listener);
});
});
TestObserver<String> test = stringObservable.test();
Listener listener = listeners.get(0);
listener.onNext("Wurst");
test.assertNotComplete().assertValue("Wurst");
verify(mock, times(1)).addListener(any());
test.dispose();
verify(mock, times(1)).removeListener(any());
}
public interface MyService {
void addListener(Listener listener);
void removeListener(Listener listener);
}
@FunctionalInterface
public interface Listener {
void onNext(String s);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.