17

据我了解AndroidObservable有助于确保:

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

但是,为了确保释放上下文(防止泄漏),我看到的大多数示例通常都说您无论如何都必须执行 .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();
}
4

2 回答 2

6

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

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

-- 部分源代码注释

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

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

于 2014-09-05T16:46:45.730 回答
1

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

于 2016-05-24T22:18:04.223 回答