RxJava 2.x新特性总结整理
程序员文章站
2022-06-20 22:51:40
什么是rxjava
rx是异步响应式编程的意思,本质是观察者模式,以观察者和订阅者的异步响应式编程。
本文主要介绍了关于rxjava 2.x新特性的相关资料,下面话不多...
什么是rxjava
rx是异步响应式编程的意思,本质是观察者模式,以观察者和订阅者的异步响应式编程。
本文主要介绍了关于rxjava 2.x新特性的相关资料,下面话不多说,来看看详细的介绍吧。
背压的分离
flowable/subscriber
flowable.range(0,10) .subscribe(new subscriber<integer>() { 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<integer>() { @override public void subscribe(flowableemitter<integer> 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<boolean>() { @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
参考
总结
以上就是关于rxjava 2.x新特性的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。