为什么要考虑在RxJava中使用AndroidObservables

时间:2014-09-02 07:55:39

标签: android rx-java rx-android

据我了解AndroidObservable有助于确保:

  1. 订阅者始终在主线程上观察
  2. 当片段/活动被分离/停止时,观察立即停止,并且框架相关组件(如ui textviews等)不会更新。
  3. 但是,为了确保上下文被释放(防止泄漏),我看到的大多数示例通常都说你必须做.unsubscribe onDestroyView / onDestroy,这实质上会停止订阅,并阻止订阅者接收无论如何这些更新。

    所以我的问题是:

    使用AndroidObservables是否有任何其他优势,如果我通过.observeOn(AndroidSchedulers.mainThread()手动指示订阅应该在主线程上发生?

    以下两种方法有什么不同吗?

    _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();
    }
    

2 个答案:

答案 0 :(得分:6)

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

  

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

     

- 部分源代码评论

因此,它并没有真正改变您使用的实现方式。

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

答案 1 :(得分:1)

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