公司根据业务的不同选用技术也有所不同,目前流行的网络请求使用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) {}
}
未完待续...