在RxJava 2中的onComplete()之前执行代码?

时间:2017-11-12 19:19:29

标签: android rx-android rx-java2

我需要在RxLifecycle处置之前关闭我的observable中的套接字连接。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

如果您想要执行操作,就在订阅者取消订阅observable之前,您可以使用operator doOnUnsubscribe

@Test
public void testDoOnUnsubscribe() {
    Integer[] numbers = {0, 1, 2, 3, 4};
    Observable.from(numbers)
            .doOnUnsubscribe(() -> System.out.println("Last action must be done here"))
            .subscribe(number -> System.out.println("number:" + number),
                    System.out::println,
                    () -> System.out.println("End of pipeline"));
}

应按此顺序打印

number:0
number:1
number:2
number:3
number:4
End of pipeline
Last action must be done here

答案 1 :(得分:1)

您可以尝试使用doFinally

  

在此Observable信号onError或onCompleted之后调用指定的操作,或者由下游处置。

http://reactivex.io/RxJava/javadoc/io/reactivex/Observable.html#doFinally-io.reactivex.functions.Action-

答案 2 :(得分:1)

如果你使用filter和map迭代对象来组合结果,那么也可以尝试这个。

.doOnTerminate(() -> Log.d(LOGGER, "terminated"))