优雅地处理Android上的RxJava订阅?

时间:2017-02-12 21:53:48

标签: java android rx-java reactive-programming reactivex

在处理Android状态更改(如方向更改)或异步平台事件(如推送通知事件)等时,是否有处理RxJava订阅的优雅方法?

到目前为止,我一直在使用EventBus来处理这样的事情,如果可能的话,我想完全转移到RxJava(不需要EventBus),但不管怎样,EventBus架构看起来好多了(只是注册和取消注册,以便处理这些场景,尤其是在处理Android平台事件时。

单独使用RxJava,似乎我们仍需要一种在片段/活动的生命周期之外保持订阅的方法(使用加载器保留片段应用程序缓存等还有其他吗?)所有这些似乎都需要额外的工作和处理。

2 个答案:

答案 0 :(得分:0)

使用CompositeSubscription

这里有一些例子:

private CompositeSubscription subscriptions = new CompositeSubscrition();

public void someSubscribe() {
    subscriptions.add(Observable.just(null).subscribe(someNull -> doSmth())
}

@Override
public void onPause() {
    subscriptions.clear() //Here all subscriptions, that were added to composite subscription, will unsubscribe
    super.onPause()
}

答案 1 :(得分:0)

您可以使用Bus-on-RX替换EventBus。然后,您必须使用单身主题来发布事件。在这种情况下,您不需要保留订阅,因为主题是“热”的Observable。这意味着您可以随时订阅/取消订阅,它仍然可以生成活动。 (重新)订阅时发生的事情由Subject type确定。

如果你想完全摆脱事件总线驱动架构,那么接受这样一个事实:在配置更改之间没有“银弹”来保留Observables(或任何其他对象)。您可以使用保留的片段,加载器,保留的演示者,单例,一些库等。这取决于具体案例和您的个人偏好。