android - 使用事件总线传递 RxJava 订阅

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

目前我正在开发一个项目,该项目使用 RxJava 和 RxBinding 来观察 View 的变化。它对于 fragment 和 Activity 非常有效,我们可以轻松访问生命周期事件 - 正如建议我们绑定(bind)到 onResume 上的数据流。并在 onPause 上解除绑定(bind).

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

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

但是,我的一位同事建议使用事件总线,该总线将用于将事件中的订阅传递给 Activity/fragment ,它们将被添加到 CompositeSubscription 中,并且所有订阅都将一起取消订阅。此外,当用户返回时,我们可以通知观看者自行订阅。

您对这种方法有何看法?在这种方法中我应该注意什么陷阱吗?

最佳答案

  1. 不要让您的 View 生命周期感知。这违反了关注点分离。
  2. 只需在适配器中的 viewBind 上使用 clickListener。
  3. 不要将订阅传递给适配器。 (适配器不需要了解它,也不需要控制它的生命周期)适配器可以只提供一个 Rx 端点,您可以在(例如)Activity onStart 中订阅该端点,并在 onStop 中取消订阅。然后,适配器可以将项目上的点击事件编码到 Observable 中。

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

关于android - 使用事件总线传递 RxJava 订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39769089/

相关文章:

javascript - 在vue js中访问通过eventbus发送的对象的值

java - RxJava 无限重试新的可观察对象

android - 如何在应用程序内部创建论坛?

android - 使用已知的 AppWidgetProviderInfo 创建小部件

java - 使用 RxJava 主题作为回调包装器

java - 何时使用事件总线?

android - TextView 不显示任何文本

android - 以开发人员身份为应用启用家庭图书馆 : Android

android - RxBinding TextChanges 不会继续发出文本更改

Android RxJava 记住变量