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产生的结果自定义规则进行过滤