RxJava2常用操作符及相关类

基于RxJava 2.1.12,记录RxJava的常用操作符及相关类。


ObservableEmitter

  • 目的
    ObservableEmitter是对Observer的抽象,用于关联Observable resource。
public interface ObservableEmitter<T> extends Emitter<T>
  • 用法
    Emitter只能同时关联一个Disposable或Cancellable;
    当Emitter的downstream cancels the flow,或当发生onError(Throwable), onComplete(), tryOnError(Throwable) succeeds,resource将会被dispose或cancel;
    当Emitter调用setDisposable(Disposable)或setCancellable(Cancellable)更换绑定resource时,之前的resource将会被dispose或cancel;
    若Emitter需要关联多个resource,可以使用CompositeDisposable与Emitter关联。

ObservableOnSubscribe

  • 目的
    命令模式接口,包含subscribe命令,绑定receiver(抽象为emitter)以调用receiver相关操作。
public interface ObservableOnSubscribe {
    void subscribe(@NonNull ObservableEmitter emitter) throws Exception;
}
  • 用法
    create操作时接受ObservableOnSubscribe的实现。

.create操作符

  • 目的
    create操作符连接了reactive world和callback-style world

ObservableCreate

  • 目的
    create操作符返回的Observable实现子类。
public final class ObservableCreate<T> extends Observable<T>

    @Override
    protected void subscribeActual(ObserverT> observer) {
        CreateEmitter<T> parent = new CreateEmitter<T>(observer);
        observer.onSubscribe(parent);
        //...
        source.subscribe(parent); //source是create操作符接受的ObservableOnSubscribe实现类,命令模式被调用的地方
        //...
    }

.subscribe操作符

  • 目的
    用于连接observer和Observable。cold Observable在subscribe动作之后开始发送消息。
public final void subscribe(ObserverT> observer) {
    //...
    subscribeActual(observer); //Observable的抽象方法,由Observable操作符的实现类实现此方法
    //....
}
  • 用法
    subscribe操作符可接受一到三个方法用于组成observer,或直接接受一个observer对象(实现onNext, onError, onComplete)。

.subscribeOn操作符

  • 目的
    用于指定ObservableSource被订阅时所在的Scheduler(通常是工作线程)
  • 用法
    无论在何处调用subscribeOn,其效果是一样的

ObservableSubscribeOn

  • 目的
    subscribeOn操作符返回的Observable实现子类。
public final class ObservableSubscribeOn<T> extends AbstractObservableWithUpstream<T, T>

    @Override
    public void subscribeActual(final Observersuper T> s) {
        final SubscribeOnObserver parent = new SubscribeOnObserver(s);

        s.onSubscribe(parent);

        parent.setDisposable(scheduler.scheduleDirect(new SubscribeTask(parent)));
    }

SubscribeOnObserver

  • 目的
    ObservableSubscribeOn的静态内部类
static final class SubscribeOnObserver<T> extends AtomicReference<Disposable> implements Observer<T>, Disposable

.observeOn操作符

  • 目的
    操作符,用于指定Observer所在的Scheduler(通常是UI主线程)
  • 用法
    影响调用observeOn之后的其它操作,故可以多次调用observeOn以切换不同线程

ObservableObserveOn

  • 目的
public final class ObservableObserveOn<T> extends AbstractObservableWithUpstream<T, T>

    @Override
    protected void subscribeActual(Observersuper T> observer) {
        if (scheduler instanceof TrampolineScheduler) {
            source.subscribe(observer);
        } else {
            Scheduler.Worker w = scheduler.createWorker();

            source.subscribe(new ObserveOnObserver(observer, w, delayError, bufferSize));
        }
    }

ObserveOnObserver

  • 目的
    ObservableObserveOn的静态内部类,在指定Scheduler.Worker中执行Observer的onNext等方法。
static final class ObserveOnObserver<T> extends BasicIntQueueDisposable<T>
    implements Observer<T>, Runnable

        @Override
        public void onNext(T t) {
            //...
            schedule();
        }

        void schedule() {
            if (getAndIncrement() == 0) {
                worker.schedule(this);
            }
        }

.map操作符

  • 目的
    将ObservableSource发送的每个信号进行转换,再依次输出经过转换后的信号
public final  Observable map(Functionsuper T, ? extends R> mapper)
  • 用法
    依据Function类定义的操作进行转换。

ObservableMap

  • 目的
public final class ObservableMap<T, U> extends AbstractObservableWithUpstream<T, U> 

    @Override
    public void subscribeActual(Observersuper U> t) {
        source.subscribe(new MapObserver(t, function));
    }
  • 用法

MapObserver

  • 目的
    ObservableMap的静态内部类,将原信号T转换为U后,再调用actual Observer的onNext方法
static final class MapObserver<T, U> extends BasicFuseableObserver<T, U>

        @Override
        public void onNext(T t) {
            //...
            U v;
            v = ObjectHelper.requireNonNull(mapper.apply(t), "The mapper function returned a null value.");
            //...
            actual.onNext(v);
        }

你可能感兴趣的:(Android)