Android 使用事件总线传递RxJava订阅

Android 使用事件总线传递RxJava订阅,android,rx-java,event-bus,rx-binding,Android,Rx Java,Event Bus,Rx Binding,目前我正在做一个项目,它使用RxJava和RxBinding来观察视图的变化。它非常适用于片段和活动,在这些片段和活动中,我们可以轻松访问生命周期事件—建议我们在onResume上绑定到数据流,并在onPause上解除绑定 最近我们引入了RecyclerView,它显示视图列表,所有视图都可以是我们想要订阅的数据流。我面临的问题是在创建视图持有者时,将CompositeSubscription对象从activity/fragment通过适配器向下传递给视图持有者。当然,它不能很好地工作,当用户离

目前我正在做一个项目,它使用RxJava和RxBinding来观察视图的变化。它非常适用于片段和活动,在这些片段和活动中,我们可以轻松访问生命周期事件—建议我们在
onResume
上绑定到数据流,并在
onPause
上解除绑定

最近我们引入了RecyclerView,它显示视图列表,所有视图都可以是我们想要订阅的数据流。我面临的问题是在创建视图持有者时,将CompositeSubscription对象从activity/fragment通过适配器向下传递给视图持有者。当然,它不能很好地工作,当用户离开屏幕并返回时,不会重新创建视图持有者(
onPause
onResume
正在被调用)

解决方案是使适配器、布局管理器(用于访问现有视图持有者)了解生命周期,但它需要我们编写额外的代码,以便在逻辑层之间传递这些订阅引用

然而,我的一位同事建议使用事件总线,它将用于将事件中的订阅传递到活动/片段,在那里它们将被添加到CompositeSubscription中,并且所有这些都将一起取消订阅。此外,当用户返回时,我们可以通知视图持有者重新订阅自己

你认为这种方法怎么样?在这种方法中,我是否应该注意到一些陷阱

  • 不要让视图了解生命周期。这违反了关注点的分离
  • 只需在适配器中的viewBind上使用clickListeners
  • 不要将订阅传递给适配器。(适配器不需要了解它,也不需要控制它的生命周期)适配器可以只提供一个Rx端点,您可以在(例如)活动onStart中订阅,在onStop中取消订阅。然后,适配器可以将项目上的单击事件编组为一个可观察的

  • 请记住:您不应该将RxJava应用于所有问题。

    通过“显示视图列表,所有视图都可以是我们想要订阅的数据流”我的意思是视图持有者比简单的可点击视图要复杂一点-它们可以是例如编辑文本视图。此外,我的建议没有违反您提到的任何一点-订阅将随事件一起从ViewHolder传递到activity/fragment,因此,它不会意识到生命周期,我们也不会将订阅传递给适配器-适配器不会意识到这些订阅。顺便说一句,对于我们所拥有的,我认为RxJava是最好的解决方案-多个数据源(视图持有者)发出需要组合和限制的数据-RxJava可以轻松处理它。