代码之家  ›  专栏  ›  技术社区  ›  R.Roshan

RxJava一个改进的网络调用subscribe

  •  8
  • R.Roshan  · 技术社区  · 7 年前

    我试图理解RxJava的改进。 我看到了许多关于subscribe方法的不同示例,但找不到正确的解释。

    第一个

     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 回复  |  直到 7 年前
        1
  •  5
  •   vikas kumar    7 年前

    1: a 调度程序。io() 用于输入-输出绑定的工作,它是另一个执行其工作的线程,除非它们被缓存并循环用于另一个工作(如果将来有)。

    1: b类 AndroidSchedulers。主线程() 因为您希望在主线程上接收结果。

    1: c类 新订户 订阅服务器订阅了Flowable,是Observer的另一个实现。

    2: 新消费者 接受单个值的函数接口(回调)。

    三: 新DisposableObserver 也是一个观察器,但它是抽象的,并允许通过实现一次性来进行异步取消。

    4: 新观察员 Observer是Observable的子类别,它提供了一种接收基于推送的通知的机制。when Observable将在完成时调用onCompleted()和onNext()或OnError(),并且只调用一次。

    主要区别于 可观察到 是吗 新建子服务器 支持背压,而两者的工作原理几乎相同。Subscriber也是Observer的一个实现。

    订阅者和消费者之间的主要区别如下

    观察者/可观察者:控制器观察观察线程。如果发生事件,控制器会收到通知,可以将新任务分配给可重用缓存线程池中的空闲线程(如果所有线程当前都忙,则等待并缓存FIFO队列中的任务)。工作线程实现可调用,并返回成功的结果(或布尔值),或返回错误,在这种情况下,控制器可以决定要执行的操作(取决于发生的错误的性质)。

    生产者/消费者:观看线程与 控制器(事件队列)和控制器与所有 工人(任务队列和结果队列)。如果发生事件 监视线程将任务对象放入事件队列。控制器 从事件队列中获取新任务,检查它们并将它们放入 任务队列。每个工作人员等待新任务并执行/使用 他们来自任务队列(先到先得,由 队列本身),将结果或错误放回 结果队列。最后,控制器可以从 结果队列,并在出现错误时采取相应的步骤。

    资料来源:

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

    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