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应用程序中有一个singletonColorModel
,它加载了我最喜欢的颜色(),作为一个可观察的(String==hexcode)
MyColorPresenter
钩住ColorModel
,将字符串
hexcode转换为可以在ColorView
中显示的Color
对象
以下是我的主要逻辑:
Observable getColor()
(来自ColorModel
)
可观察的getColorForView()
(来自ColorPresenter
)
subscribe()
(在ColorView
中)
问题
- #在每个订阅上创建1。如果有多个演示者呼叫#1,这是非常浪费的。我不希望重复此步骤(仅在第一次调用时启动,然后缓存)
- 当我在
onStop()
期间取消订阅时,2会被取消(需要),但取消订阅也会导致1被取消(不需要)
您可以将ConnectedObservables与replay操作员一起使用。请参阅接受的答案。您应该查看操作员。您可以使用它并将引用存储到某个可观察的地方(如ConnectableObservable
)
请小心,因为您无法取消订阅使用缓存
操作符创建的observable。但在您的情况下,这正是您想要的,因为取消订阅#2不再影响#1生命周期。您需要向我们展示您的代码。仅仅描述它是不够的。而且第一个问题似乎真的没什么大不了的——可观测的计算成本有多高?@Enigmativity假装它的计算成本非常高(我实际上没有加载最喜欢的颜色,它是一个简化版本)好的,你现在需要向我们展示真正的代码。