使用事件总线传递RxJava订阅

时间:2016-09-29 11:31:23

标签: android rx-java event-bus rx-binding

目前,我正在开发一个项目,该项目使用RxJava和RxBinding一起观察视图'变化。它可以很好地处理我们可以轻松访问生命周期事件的片段和活动 - 因为它建议我们绑定onResume上的数据流并解除onPause上的绑定。

最近我们介绍了RecyclerView,它显示了视图列表,所有这些视图都可以是我们想要订阅的数据流。我遇到的问题是在创建时将CompositeSubscription对象从活动/片段通过适配器传递给视图持有者。当然,它并不能很好地运行当用户离开屏幕并返回时(onPauseonResume被调用),ViewHolders不会被重新创建。

解决方案是使适配器,布局管理器(访问现有视图持有者)生命周期识别,但它需要我们编写额外的代码来传递逻辑层之间的订阅参考。

然而,我的一位同事建议使用事件总线,它将用于将事件中的Subscription传递给activity / fragment,然后将它们添加到CompositeSubscription中,并且所有这些都将被取消订阅。此外,我们可以通知视图持有者在用户返回时将其自身归属。

您如何看待这种方法?在这种方法中我是否应该注意哪些陷阱?

1 个答案:

答案 0 :(得分:2)

  1. 不要让您的视图生命周期识别。这违反了关注点。
  2. 只需在适配器中的viewBind上使用clickListeners。
  3. 不要将订阅传递给适配器。 (适配器不需要了解它,也不需要控制它的生命周期)适配器可以只提供您在(例如)Activity onStart中订阅的Rx端点并在onStop中取消订阅。然后,Adapter可以将项目上的点击事件编组处理为Observable
  4. 请记住:您不应该将RxJava应用于每个问题。