【问题标题】:RxJava, execute code in the observer thread before chaining two observablesRxJava,在链接两个可观察对象之前在观察者线程中执行代码
【发布时间】:2015-04-16 08:31:16
【问题描述】:

我正在使用 RxJava 和 RxAndroid,我想组合两个 observable,但在这两者之间我需要更新 UI,所以我必须在 到达订阅者之前在主线程中执行代码。

一个解决方案,而不是平面映射(这是一个公认的术语吗?)两个可观察对象,是在更新 UI 后立即在订阅者中调用下一个可观察对象,但我觉得应该有一个更优雅的解决方案,例如:

myObservable
    .map(new Func1<Object, Object>() {
        @Override
        public Object call(Object object) {
            /* do stuff on the main thread */
            return object;
        }
    })
    .flatMap(new Func1<Object, Observable<OtherObject>>() {
        @Override
        public Observable<OtherObject> call(Object o) {
            return new MyOtherObservable(o);
        }
    })
    .subscribeOn(Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread());

当然,可能 map 不是我这里需要使用的运算符。那么,是否有运营商或更好的方法来实现这一目标?还是我错过了关于 observables 应该如何工作的要点?

【问题讨论】:

    标签: android rx-java rx-android


    【解决方案1】:

    Rxjava 有一个 doOnNext 运算符,这正是您要寻找的。

    【讨论】:

    • 是在观察者线程上调用的吗?文档指出它不在特定的调度程序上运行。
    • 你必须使用 observeOn 并指定调度器
    • 谢谢,可以肯定的是,这意味着我在 doOnNext 上运行的所有内容都将与订阅者在同一个线程中运行。
    • 刚刚检查,doOnNext 正在另一个线程中被调用,而订阅者正在主线程中被调用(对主线程使用 observeOn)。
    • ObserveOn 应该在 doOnNext 之前调用
    猜你喜欢
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多