java 观察者模式 异步_什么是RxJavaRx是异步响应式编程的意思,本质是观察者模式,以观察者和订阅者的异步响应式编程。本文主要介绍了关于RxJava 2.x新特性的相关资料,下...

什么是RxJava

Rx是异步响应式编程的意思,本质是观察者模式,以观察者和订阅者的异步响应式编程。

本文主要介绍了关于RxJava 2.x新特性的相关资料,下面话不多说,来看看详细的介绍吧。

背压的分离

ff5fa741e88727b00b3b221d867418ca.png

Flowable/Subscriber

Flowable.range(0,10)

.subscribe(new Subscriber() {

Subscription sub;

//当订阅后,会首先调用这个方法,其实就相当于onStart(),

//传入的Subscription s参数可以用于请求数据或者取消订阅

@Override

public void onSubscribe(Subscription s) {

Log.w("TAG","onsubscribe start");

sub=s;

sub.request(1);

Log.w("TAG","onsubscribe end");

}

@Override

public void onNext(Integer o) {

Log.w("TAG","onNext--->"+o);

sub.request(1);

}

@Override

public void onError(Throwable t) {

t.printStackTrace();

}

@Override

public void onComplete() {

Log.w("TAG","onComplete");

}

});

输出:

onsubscribe start

onNext--->0

onNext--->1

onNext--->2

...

onNext--->10

onComplete

onsubscribe end

根据上面的代码的结果输出中可以看到,当我们调用subscription.request(n)方法的时候,不等onSubscribe()中后面的代码执行,就会立刻执行到onNext方法,因此,如果你在onNext方法中使用到需要初始化的类时,应当尽量在subscription.request(n)这个方法调用之前做好初始化的工作;

另外一种创建方法

Flowable.create(new FlowableOnSubscribe() {

@Override

public void subscribe(FlowableEmitter e) throws Exception {

e.onNext(1);

e.onNext(2);

e.onNext(3);

e.onNext(4);

e.onComplete();

}

}

//需要指定背压策略

, BackpressureStrategy.BUFFER);

其他观察者模式

Single/SingleObserver

Completable/CompletableObserver

Maybe/MaybeObserver

以上三种类似, 比较适合发送单个数据, 并不适合发送大量数据.

//判断是否登陆

Maybe.just(isLogin())

//可能涉及到IO操作,放在子线程

.subscribeOn(Schedulers.newThread())

//取回结果传到主线程

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new MaybeObserver() {

@Override

public void onSubscribe(Disposable d) {

}

@Override

public void onSuccess(Boolean value) {

if(value){

...

}else{

...

}

}

@Override

public void onError(Throwable e) {

}

@Override

public void onComplete() {

}

});

实际上,这种观察者模式并不用于发送大量数据,而是发送单个数据,也就是说,当你只想要某个事件的结果(true or false)的时候,你可以用这种观察者模式

Action

Rx1.0———–Rx2.0

Action1——–Action

Action1——–Consumer

Action2——–BiConsumer

后面的Action都去掉了,只保留了ActionN

参考

eb573e0720669b87ddb575f011bb60dc.png

f482ed2665ccf71e921c1eabd6bc0c94.png

a940a26aa8faea142858b5c8875f389f.png

af902a2d98b7c67b4501aa46a331387d.png

43557127af18340e13922945d5cca6c2.png

f95817231cfc2a3dd1242eda03b29e20.png

15cd6104fc3f09bea95641f0abac5743.png

86776bd491c46a77994311a6b7e94864.png

总结

以上就是关于RxJava 2.x新特性的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值