我应该使用什么Rx工具从连续的Rx流(实际上是PublishSubject)返回UI只有一个observable?

时间:2016-12-15 12:27:06

标签: android rx-java

我有PublishSubject,一旦从服务收到新消息就会发出新项目(它运行后台线程,打开套接字连接并从服务器发送/接收消息,一旦收到消息,发送带有收到消息的localbroadcast) 。 当UI需要调用服务器并从响应中获取一些数据时,我会过滤传入消息流,只接收一条预期消息(每条消息都有唯一的ID,因此很容易)。所以这是我的简化代码:

public Observable<ResponseType> getStuff() {
    Request request = new Request()
    messageSender.send(request);

    AsyncSubject<ResponseType> subject = AsyncSubject.create()

    inStream.filter(response -> response.hasId())
            .filter(response -> response.getId() == request.getId());
            .subscribe(response -> {
                subject.onNext(response);
                subject.onComplete();
            }, error -> { subject.onError(error) });
}

所以...因为我无法理解某些事情。

  1. 在主题收到一条消息并完成后,隐式观察是否会死亡?
  2. 使用AsyncSubject仅发出一个项目是不好的,但我不知道任何替代方案。
  3. 我应该使用什么Rx类来通知UI有关响应?我听说过Single&lt;&gt;,但我不知道如何在我的代码中插入它。

    我应该学习哪种更好的流过滤机制?

1 个答案:

答案 0 :(得分:0)

找到两个解决方案:

  • Observable#first()
  • Observable#toSingle()

解决。