RxJava解析

59 阅读1分钟

RxJava的简单使用

背压

背压是指,在异步场景中,被观察者发送事件的速度远大于观察者处理事件速度的情况下,一种告知被观察者减低发送事件速度的策略。

Observable

Obserable实现了ObservableSource接口,将给定的 Observer 订阅到此 ObservableSource 实例。 参数:Observer——观察者。

public interface ObservableSource<@NonNull T> {

    /**
     * Subscribes the given {@link Observer} to this {@link ObservableSource} instance.
     * @param observer the {@code Observer}, not {@code null}
     * @throws NullPointerException if {@code observer} is {@code null}
     */
    void subscribe(@NonNull Observer<? super T> observer);
}

Oberable.create()每当观察者订阅 Observable 时,提供的 ObservableOnSubscribe 回调将被调用,并使用 ObservableEmitter 的新实例调用,该实例将仅与该特定观察者交互。如果这个 Observer 处理流(使 ObservableEmitter.isDisposed 返回 true),其他订阅相同返回 Observable 的观察者不受影响。

public abstract class Observable<@NonNull T> implements ObservableSource<T>
    @CheckReturnValue
    @NonNull
    @SchedulerSupport(SchedulerSupport.NONE)
    public static <@NonNull T> Observable<T> create(@NonNull ObservableOnSubscribe<T> source) {
        Objects.requireNonNull(source, "source is null");
        return RxJavaPlugins.onAssembly(new ObservableCreate<>(source));
    }
    
    public final Observable<T> observeOn(Scheduler scheduler) { 
        return observeOn(scheduler, false, bufferSize()); 
    }

RxJavaPlugins.onAssembly(new ObservableCreate<>(source))会对ObserveCreate进行包装,默认情况下,onObservableAssembly为null,所以一般是直接返回source。只有调用RxJavaPlugins.setOnObservableAssembly之后onObserveableAssembly才不为null。这个主要是为了在执行操作符之前可以调用。

public static <@NonNull T> Observable<T> onAssembly(@NonNull Observable<T> source) {
    Function<? super Observable, ? extends Observable> f = onObservableAssembly;
    if (f != null) {
        //Wraps the call to the function in try-catch and propagates thrown checked 
        //exceptions as RuntimeException.
        return apply(f, source);
    }
    return source;
}

observeOn()指定在哪个线程执行 Observable。

常用操作符

1.map:通过指定一个Function对象将源Observable转换成一个新的对象。 2.filter:对源Observable产生的结果自定义规则进行过滤