繁体   English   中英

RxJava是一个Retrofit网络呼叫订阅

[英]RxJava an Retrofit Network call subscribe

我试图了解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() {

                    }
                });

谁能解释这三种做法有什么用呢? 每个人都有不同的含义或做同样的事情?

1: Schedulers.io()用于输入输出绑定工作,它是另一个执行其工作的线程,除非它们被缓存并在将来再次用于另一个工作,如果有的话。

1:b AndroidSchedulers.mainThread()因为你想在主线程上收到结果。

1:c 新的Subscriber Subscriber订阅了Flowable,是Observer的另一个实现。

2: new Consumer一个接受单个值的功能接口(回调)。

3: 新的DisposableObserver也是一个Observer但是是抽象的,它允许通过实现Disposable进行异步取消。

4: 新的Observer Observer被子支持Observable,并提供了一种接收基于推送的通知的机制。 当Observable完成后只调用一次onCompleted()和onNext()或OnError()。

Observable的主要区别在于新的Subsciber支持背压,而两者的工作方式几乎相同,Subscriber也是Observer的实现。

Subscriber和Consumer之间的主要区别如下

Observer / Observable:控制器观察观察线程。 在事件发生的情况下,然后通知控制器并且可以将新任务分配给来自可重用缓存线程池的空闲线程(或者如果所有线程当前都忙,则等待并缓存FIFO队列中的任务)。 工作线程实现Callable并且返回带有结果的成功(或布尔值),或者返回错误,在这种情况下,控制器可以决定要做什么(取决于已经发生的错误的性质)。

生产者/消费者:观察线程与控制器(事件队列)共享一个BlockingQueue,控制器与所有工作者(任务队列和结果队列)共享两个。 在事件的情况下,观察线程将任务对象放入事件队列中。 控制器从事件队列中获取新任务,检查它们并将它们放入任务队列中。 每个工作程序等待新任务并从任务队列中获取/使用它们(先到先得,由队列本身管理),将结果或错误放回到结果队列中。 最后,控制器可以从结果队列中检索结果,并在出现错误时采取相应的步骤。

来源:

https://softwareengineering.stackexchange.com/questions/286763/difference-between-consumer-producer-and-observer-observable

观察者和订阅者之间有什么区别?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM