【问题标题】:Why should one consider using AndroidObservables in RxJava为什么要考虑在 RxJava 中使用 AndroidObservables
【发布时间】:2014-10-26 10:18:57
【问题描述】:

据我了解,AndroidObservable 有助于确保:

  1. 订阅者总是在主线程上观察
  2. 当分离/停止片段/活动时,观察立即停止,并且框架相关组件(如 ui textview 等)不会更新。

但是,为了确保释放上下文(防止泄漏),我看到的大多数示例通常都说您无论如何都必须执行 .unsubscribe onDestroyView/onDestroy,这实际上会停止订阅,并阻止订阅者接收无论如何,这些更新。

所以我的问题是:

如果我通过 .observeOn(AndroidSchedulers.mainThread() 手动指示订阅应该发生在主线程上,那么使用 AndroidObservables 还有其他好处吗?

以下两种方法有什么区别吗?

_subscription1 = AndroidObservable.bindFragment(MyFragment.this, myCustomAwesomeObservable()) //
                           .subscribeOn(Schedulers.io()) //
                           .subscribe(...);


_subscription2 =  myCustomAwesomeObservable()
                           .subscribeOn(Schedulers.io()) //
                           .observeOn(AndroidSchedulers.mainThread()) //
                           .subscribe(...);


@Override
public void onDestroyView() {
    _subscription1.unsubscribe();
    _subscription2.unsubscribe();
    super.onDestroyView();
}

【问题讨论】:

    标签: android rx-java rx-android


    【解决方案1】:

    你是对的。 AndroidObservable.bindFragment 目前所做的是:

    此助手将安排在主 UI 线程上观察给定的序列,并确保在安排完成时不会将任何通知转发到活动。

    --部分源码注释

    因此,您使用哪种实现并没有真正的区别。

    但是,使用 AndroidObservable 仍然是一个好主意,因为将来可能会添加其他功能。

    【讨论】:

    • 啊,关于通过 AndroidObservable 路由添加的附加功能,这是一个很好的观点。
    【解决方案2】:

    自 RxAndroid 1.0 版本以来,它不再存在。我想你可以说它已被弃用或停产。我认为不再使用它是个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 2011-04-26
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多