kos*_*kos 6 android rx-java retrofit rx-android
我在Android上使用RxJava和Retrofit 2.0进行网络请求.
当我创建observable时,我将以下内容添加到它:
observable = observable
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
Run Code Online (Sandbox Code Playgroud)
然后,如果我添加一个:
observable = observable.doOnTerminate(new Action0() {
@Override
public void call() {
Log.d("OBS", "[" + Thread.currentThread().getName() + "] onTerminate");
}
});
Run Code Online (Sandbox Code Playgroud)
或类似的,doOnError并且doOnCompleted在IO线程上执行回调,同时doOnNext在主线程上执行.
但是,我真正想要的是所有回调都转到主线程,但执行应该保留在IO线程上.
是否有一个优雅的解决方案,而不必手动包装我的实现与块发布到主线程的东西?
aka*_*okd 11
你应该把你的回调放在任何之前,observeOn这样它们就会留在它的前一个线程上:
Observable.range(1, 10)
.subscribeOn(Schedulers.io())
.doOnTerminate(() -> System.out.println(Thread.currentThread()))
.map(v -> v + 1)
.observeOn(AndroidSchedulers.mainThread())
.map(v -> Thread.currentThread() + " / " + v)
.doOnNext(v -> Log.d("OBS", v))
.subscribe();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |