Android 如何用RxJava演示器替换EventBus模式?

Android 如何用RxJava演示器替换EventBus模式?,android,system.reactive,rx-java,reactive-programming,reactivex,Android,System.reactive,Rx Java,Reactive Programming,Reactivex,Controller+EventBus模式在Android中运行得非常好,但是到处触发事件会变得非常混乱。如果控制器多次收到加载相同数据的请求,很容易让它在第一次加载时就开始加载,在加载时忽略后续请求,并在加载完成后开始侦听未来的加载请求。我如何使用RxJava(使用MVP演示者?) 场景 我的android应用程序中有一个singletonColorModel,它加载了我最喜欢的颜色(),作为一个可观察的(String==hexcode) MyColorPresenter钩住ColorMode

Controller
+
EventBus
模式在Android中运行得非常好,但是到处触发事件会变得非常混乱。如果控制器多次收到加载相同数据的请求,很容易让它在第一次加载时就开始加载,在加载时忽略后续请求,并在加载完成后开始侦听未来的加载请求。我如何使用RxJava(使用MVP演示者?)

场景

我的android应用程序中有一个singleton
ColorModel
,它加载了我最喜欢的颜色(),作为一个可观察的
(String==hexcode)

My
ColorPresenter
钩住
ColorModel
,将
字符串
hexcode转换为可以在
ColorView
中显示的
Color
对象

以下是我的主要逻辑:

  • Observable getColor()
    (来自
    ColorModel
  • 可观察的getColorForView()
    (来自
    ColorPresenter
  • subscribe()
    (在
    ColorView
    中)
  • 问题

    • #在每个订阅上创建1。如果有多个演示者呼叫#1,这是非常浪费的。我不希望重复此步骤(仅在第一次调用时启动,然后缓存)
    • 当我在
      onStop()
      期间取消订阅时,2会被取消(需要),但取消订阅也会导致1被取消(不需要)

    您可以将ConnectedObservables与replay操作员一起使用。请参阅接受的答案。

    您应该查看操作员。您可以使用它并将引用存储到某个可观察的地方(如
    ConnectableObservable


    请小心,因为您无法取消订阅使用
    缓存
    操作符创建的observable。但在您的情况下,这正是您想要的,因为取消订阅#2不再影响#1生命周期。

    您需要向我们展示您的代码。仅仅描述它是不够的。而且第一个问题似乎真的没什么大不了的——可观测的计算成本有多高?@Enigmativity假装它的计算成本非常高(我实际上没有加载最喜欢的颜色,它是一个简化版本)好的,你现在需要向我们展示真正的代码。