我试图了解RxJava的改造。 我在订阅方法上看到了很多不同的例子,但是找不到合适的解释。
第一名
Observable<PostMessage> call = service.callAPI(data);
call.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<PostMessage>(
));
第二个
Observable<PostMessage> call = service.callAPI(data);
call.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<PostMessage>(
) {
@Override
public void accept(PostMessage postMessage) throws Exception {
}
});
}
第三名
Observable<PostMessage> call = service.callAPI(data);
call.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableObserver<PostMessage>() {
@Override
public void onNext(PostMessage postMessage) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
第四个Observable<PostMessage> call = service.callAPI(data);
call.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<PostMessage>(
) {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(PostMessage postMessage) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
有没有人可以解释这三种做法的含义。 每个人都有不同的含义或做同样的事情?
答案 0 :(得分:4)
1: Schedulers.io()用于输入输出绑定工作,它是另一个执行其工作的线程,除非它们被缓存并回收用于另一个作业将来如果有的话。
1:b AndroidSchedulers.mainThread()因为你想在主线程上收到结果。
1:c 新订阅者订阅者订阅了Flowable,是Observer的另一个实现。
2:新消费者 一个接受单个值的功能接口(回调)。
3:新的DisposableObserver 也是一个Observer但是是抽象的,可以通过实现Disposable来实现异步取消。
4:新观察者观察者被子视为Observable,并提供接收基于推送的通知的机制。当Observable在完成时调用onCompleted()和onNext()或OnError()并且只调用一次。
与 Observable 的主要区别在于新的Subsciber 支持背压,而两者的工作方式几乎相同,而Subscriber也是Observer的实现。
Subscriber和Consumer之间的主要区别如下
Observer / Observable:控制器观察观察线程。在事件发生的情况下,然后通知控制器并且可以将新任务分配给来自可重用缓存线程池的空闲线程(或者如果所有线程当前都忙,则等待并缓存FIFO队列中的任务)。工作线程实现Callable并返回带有结果的成功(或布尔值),或者返回错误,在这种情况下,控制器可以决定要做什么(取决于已经发生的错误的性质)。
制作者/消费者:观看线程与...共享一个BlockingQueue 控制器(事件队列)和控制器共享两个 worker(任务队列和结果队列)。在发生事件的情况下, 观察线程将任务对象放入事件队列中。控制器 从事件队列中获取新任务,检查它们并将它们放入 任务队列。每个工人等待新任务并消耗/消耗 他们来自任务队列(先到先得,由管理 队列本身),将结果或错误重新放入 结果队列。最后,控制器可以从中检索结果 结果队列并在出现错误时采取相应步骤。
来源:
What is the difference between an Observer and a Subscriber?
http://reactivex.io/RxJava/javadoc/rx/schedulers/Schedulers.html
http://reactivex.io/RxJava/javadoc/io/reactivex/functions/Consumer.html
http://reactivex.io/RxJava/javadoc/io/reactivex/observers/DisposableObserver.html