RxJava框架中Observable<T>与Flowable<T>使用

原创
2019/08/16 11:16
阅读数 7.8K

公司根据业务的不同选用技术也有所不同,目前流行的网络请求使用RxJava + Retrofit2框架实现的。通过Retrofit2框架的@Post()来注解login()方法返回Observale<T>类型或Flowable<T>类型。Observable<T>与Flowable<T>有什么区别呢?

代码如下:

    @POST("login")
    Observable<Response<LoginResponse>> login(@Body LoginRequest loginRequest);
    @POST("login")
    Flowable<Response<LoginResponse>> login(@Body LoginRequest loginRequest);

对以上代码的思考引出了这篇文章的核心。

在普通的RxJava模型中,上游主动推送事件给下游,下游的被动接收数据(下游的onNext方法是被动触发的)。而在响应式拉取模型中,由下游来请求上游发送事件。

Flowable<T>与Observable<T>不同的是它提供了Backpressure策略的支持。所以在性能上低于Observable,因为内部为了完成背压操作添加了许多其他操作。

create()方法

Observable<T>类

    public static <T> Observable<T> create(ObservableOnSubscribe<T> source) {}

Flowable<T>

    public static <T> Flowable<T> create(FlowableOnSubscribe<T> source, BackpressureStrategy mode) {}

Observable<T>

public class Observable<T>  {


    public final Subscription subscribe(){}

    public final Subscription subscribe(final Action1<? super T> onNext) {}

    public final Subscription subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError) {}

    public final Subscription subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError, final Action0 onCompleted) {}

    public final Subscription subscribe(final Observer<? super T> observer) {}

    public final Subscription subscribe(Subscriber<? super T> subscriber) {}

    static <T> Subscription subscribe(Subscriber<? super T> subscriber, Observable<T> observable) {}

    public final Observable<T> subscribeOn(Scheduler scheduler) {}

    public final Observable<T> subscribeOn(Scheduler scheduler, boolean requestOn) {}

    public final Subscription unsafeSubscribe(Subscriber<? super T> subscriber) {}

    static <T> Subscription subscribe(Subscriber<? super T> subscriber, Observable<T> observable) {}




}

Flowable<T>

//类结构 public interface Publisher<T> {}

public abstract class Flowable<T> implements Publisher<T> {

    public final Disposable subscribe() {}

    public final Disposable subscribe(Consumer<? super T> onNext) {}

    public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {}

    public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}

    public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError,Action onComplete, Consumer<? super Subscription> onSubscribe) {}

    public final void subscribe(Subscriber<? super T> s) {}

    public final void subscribe(FlowableSubscriber<? super T> s) {}

    public final Flowable<T> subscribeOn(@NonNull Scheduler scheduler) {}

    public final Flowable<T> subscribeOn(@NonNull Scheduler scheduler, boolean requestOn) {}

}

未完待续...

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部