Android 使用事件总线传递RxJava订阅
目前我正在做一个项目,它使用RxJava和RxBinding来观察视图的变化。它非常适用于片段和活动,在这些片段和活动中,我们可以轻松访问生命周期事件—建议我们在Android 使用事件总线传递RxJava订阅,android,rx-java,event-bus,rx-binding,Android,Rx Java,Event Bus,Rx Binding,目前我正在做一个项目,它使用RxJava和RxBinding来观察视图的变化。它非常适用于片段和活动,在这些片段和活动中,我们可以轻松访问生命周期事件—建议我们在onResume上绑定到数据流,并在onPause上解除绑定 最近我们引入了RecyclerView,它显示视图列表,所有视图都可以是我们想要订阅的数据流。我面临的问题是在创建视图持有者时,将CompositeSubscription对象从activity/fragment通过适配器向下传递给视图持有者。当然,它不能很好地工作,当用户离
onResume
上绑定到数据流,并在onPause
上解除绑定
最近我们引入了RecyclerView,它显示视图列表,所有视图都可以是我们想要订阅的数据流。我面临的问题是在创建视图持有者时,将CompositeSubscription对象从activity/fragment通过适配器向下传递给视图持有者。当然,它不能很好地工作,当用户离开屏幕并返回时,不会重新创建视图持有者(onPause
和onResume
正在被调用)
解决方案是使适配器、布局管理器(用于访问现有视图持有者)了解生命周期,但它需要我们编写额外的代码,以便在逻辑层之间传递这些订阅引用
然而,我的一位同事建议使用事件总线,它将用于将事件中的订阅传递到活动/片段,在那里它们将被添加到CompositeSubscription中,并且所有这些都将一起取消订阅。此外,当用户返回时,我们可以通知视图持有者重新订阅自己
你认为这种方法怎么样?在这种方法中,我是否应该注意到一些陷阱
请记住:您不应该将RxJava应用于所有问题。通过“显示视图列表,所有视图都可以是我们想要订阅的数据流”我的意思是视图持有者比简单的可点击视图要复杂一点-它们可以是例如编辑文本视图。此外,我的建议没有违反您提到的任何一点-订阅将随事件一起从ViewHolder传递到activity/fragment,因此,它不会意识到生命周期,我们也不会将订阅传递给适配器-适配器不会意识到这些订阅。顺便说一句,对于我们所拥有的,我认为RxJava是最好的解决方案-多个数据源(视图持有者)发出需要组合和限制的数据-RxJava可以轻松处理它。