美文网首页
Rxjava中 lift 变换原理

Rxjava中 lift 变换原理

作者: xiucui | 来源:发表于2017-09-13 20:35 被阅读94次

今天想到这个问题,又回来看了一遍,虽然是rxjava1 讲的,rxjava2 也是一样的啦,之前也是看了好多次,就是那种似懂非懂的感觉,这次明白了。

就按map 理解一下吧,下边这个不是源码,但是关键代码。

public Observable lift(Operator operator)

    4.    return Observable.create(new OnSubscribe({

                  @Override

                    public void call(Subscriber subscriber{

                                //这一句将老的转成新的了

                          1.   Subscriber newSubscriber=operator.call(subscriber);

                          2.  newSubscriber.onStart();

                          3.  onSubscribe.call(newSubscriber);

                    }

        });

}

1.讲解:

OperatorMap 的源码

public final class OperatorMap implements Operator {

          private final Func1 transformer;

          public OperatorMap(Func1 transformer) {

                    this.transformer= transformer;

          }

        @Override

        public Subscriber call(final Subscriber o) {

              return newSubscriber(o) {

                    @Override

                    public void onCompleted() {

                                  o.onCompleted();

                    }

                    @Override

                    public void onError(Throwable e) {

                                  o.onError(e);

                    }

                  @Override

                  public void onNext(T t) {

                              try{

                                  o.onNext(transformer.call(t));

                              }catch(Throwable e) {

                                        Exceptions.throwOrReport(e, this,t);

                              }

                    }

        };

}

}

看到这一行的时候先去看下OperatorMap的源码,OperatorMap .call 是创建一个新的Subscriber 返回目标Subscriber,第一行就是返回一个新的目标Subscriber。

2.

his method is invoked when the Subscriber and Observable have been connected but the Observable has

not yet begun to emit items or send notifications to the Subscriber. Override this method to add any

useful initialization to your subscription, for instance to initiate backpressure.

3.onSubscribe 是新的Observable 中的,然后call 的新的目标Subscriber。

4.返回一个新的Observable赋值给老的Observable

相关文章

  • RxJava中lift()变换原理

    在RxJava中,map(),flatMap()虽然功能各有不同,但实质上都是针对事件序列的处理和再发送。而在它们...

  • Rxjava中 lift 变换原理

    今天想到这个问题,又回来看了一遍,虽然是rxjava1 讲的,rxjava2 也是一样的啦,之前也是看了好多次,就...

  • RxJava 系列 (三)RxJava lift原理

    前言 理解lift原理有什么意义? 可以理解Rxjava最核心的原理,看懂了lift你就看懂了Rxjava lif...

  • RxJava详解(三)

    RxJava详解(三) 变换的原理lift() 这些变换虽然功能各有不同,但实质上都是针对事件序列的处理和再发送。...

  • rxjava lift源码解析

    最近在看给Android开发者的RxJava详解这篇文章,前面的都能理解,看到变换的原理——lift()这块的时候...

  • RxJava lift()原理

    lift()方法是RxJava中所有操作符的基础,可以通过它做各种各样的变化。弄清楚它的原理,也方便我们理解其他操...

  • 读RxJava源码:lift() & Operator

    lift()是RxJava中变换思想的核心,接受一个Operator参数,返回一个新的Observable。 Op...

  • RxJava 源码分析系列(四) -操作符变换原理

      我们继续来学习RxJava的源码,今天主要会学习RxJava中的操作符变换原理。  本文重点讲解Observa...

  • 深入理解RxJava的lift变换

    前言 因为这些时间我一直在写RxJava操作符源码解析,每次讲到一些操作符的时候,就不免要涉及到了lift变换。所...

  • 迷之RxJava (三)—— 线程切换

    【谜之RxJava (二) —— Magic Lift】 Rxjava -- 一个异步库 RxJava最迷人的是什...

网友评论

      本文标题:Rxjava中 lift 变换原理

      本文链接:https://www.haomeiwen.com/subject/sumlsxtx.html