小白学习Rxjava2,从零开始到实战(一) RxJava2的基础使用
来源:互联网 发布:火爆网络的ann是谁 编辑:程序博客网 时间:2024/06/05 08:23
- 前言
- 小白学习之我见
- 正文
- 导入Rxjava2
- Rxjava2的简单使用
- 总结
前言
RxJava是什么?
RxJava 在 GitHub 主页上是这样说的 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。
恩,简单来说,异步操作库。
RxJava的特点?
简洁。
这里的简洁并不是指代码长度,而是逻辑上的简洁。具体的解释可以看下扔物线大大的博客,里面介绍的很详细:给 Android 开发者的 RxJava 详解
为什么选择RxJava2?
Rxjava 2 vs Rxjava1 ,是否要升级?
总结一下:Rxjava2在背压问题上做出了解决方案,提升了性能,但相应的,部分写法变得更加复杂。
现阶段Rxjava还在维护,使用的话,完全没有问题;但是,如果你的应用还有较长的使用时间,而且有像传感器那样一秒连戳几十下的操作,那最好还是升级到Rxjava2;
小白学习之我见
个人评价:
如果是跟我一样之前没搞过Rxjava,那么感觉还是直接从Rxjava2学起吧,毕竟以后还是要学的,这一刀跑不了。
难度方面:
如果没有点基础,刚上来还是有点难度的,毕竟从最直观的代码长度上来看,RxJava没有太大优势,而且要想理解其中的原理还是有点难度的;不过只是想学会怎么用的话,难度还是可以的。(顺便吐槽下,好多都是讲一遍观察者,订阅者,订阅关系………………,讲这么多名词,绕都绕晕了,刚上来谁知道订阅是个什么东西啊)
顺便提一下这篇博客:给初学者的RxJava2.0教程(一),感觉写的非常不错。
正文
导入Rxjava2
build.gradle中加入
compile "io.reactivex.rxjava2:rxjava:2.0.7" compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
Rxjava2的简单使用
最简单的Rxjava2的使用就像下面这样:
//创建订阅者Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onSubscribe(Subscription s) { //这一步是必须,我们通常可以在这里做一些初始化操作,调用request()方法表示初始化工作已经完成 //调用request()方法,会立即触发onNext()方法 //在onComplete()方法完成,才会再执行request()后边的代码 s.request(Long.MAX_VALUE); } @Override public void onNext(String value) { Log.e("onNext", value); } @Override public void onError(Throwable t) { Log.e("onError", t.getMessage()); } @Override public void onComplete() { //由于Reactive-Streams的兼容性,方法onCompleted被重命名为onComplete Log.e("onComplete", "complete"); }};Flowable.create(new FlowableOnSubscribe<String>() { @Override public void subscribe(FlowableEmitter<String> e) throws Exception { e.onNext("Hello,I am China!"); }}, BackpressureStrategy.BUFFER) .subscribe(subscriber);
具体分析一下的话,可以这么想象:
你的Boss现在给你提了个需求:
有两种盒子,一种名叫Flowable
,一种名叫Subscriber
,其中Flowable
放了很多个小球,现在你要做的事,就是把Flowable
中的小球放到Subscriber
中,然后读出来贴在小球上的标签。
那么,我们该怎么做呢?
第一步,首先要挑出这两个盒子,名为Flowable
的盒子就是通过create方法创建,称之为被观察者,名为Subscriber
的盒子可以直接new出来,称之为观察者/订阅者。
第二步,就是要确定,我是要把Flowable
中的小球放到哪个Subscriber
中,这就是代码中的subscribe
方法,告诉Flowable
,你的小球发到哪个Subscriber
盒子中,这个过程就叫做订阅。
第三步,就可以动手把Flowable
中的小球拿出来了,拿出小球的过程就是Flowable
.create
方法中的subscribe
。
@Override public void subscribe(FlowableEmitter<String> e) throws Exception { e.onNext("Hello,I am China!"); }
在这个方法中,出现了一个FlowableEmitter
,这个Emitter
就是发射器的意思,可以想象成拿出小球的那只手;e.onNext("Hello,I am China!");
可以理解为,用名为FlowableEmitter
的手,拿出一个带有"Hello,I am China!"
标签的小球。如果你要想再拿出个小球,那就再写一遍onNext
即可;
第四步,好了,拿出小球了,总要放到另一个盒子中吧,这时候就到了Subscriber
这个盒子中了。首先,这个盒子跟上个盒子Flowable
稍微有点不同,它有一个盖子:Subscription
。
@Override public void onSubscribe(Subscription s) { //这一步是必须,我们通常可以在这里做一些初始化操作,调用request()方法表示初始化工作已经完成 //调用request()方法,会立即触发onNext()方法 //在onComplete()方法完成,才会再执行request()后边的代码 s.request(Long.MAX_VALUE); }
这个盖子的作用就是控制进入Subscriber
中小球的数量和速度的,还记得Rxjava2和Rxjava1的区别之一——背压问题么,这块就是通过这个盖子来控制解决的;如果,你不想让小球进入盒子,那么直接Subscription.cancle()
,如果想让每回只进入10个小球,那就Subscription.request(10)
;当然,背压问题不是仅仅这么就能解决的,具体解决方案在后面会提到。
第五步,ok,小球放进去了,就剩读标签这个操作了,读标签这个操作就是onNext
方法,相应的出错和完成方法就是onError
和onComplete
@Override public void onNext(String value) { Log.e("onNext", value); } @Override public void onError(Throwable t) { Log.e("onError", t.getMessage()); } @Override public void onComplete() { //由于Reactive-Streams的兼容性,方法onCompleted被重命名为onComplete Log.e("onComplete", "complete"); }
总结
到这里,基本的简单使用,就是这样,当然用Rxjava2不可能就这么使用就ok了,异步操作这一重点会放到下一章来说明。不过现在要学习的是retrofit
- 小白学习Rxjava2,从零开始到实战(一) RxJava2的基础使用
- 小白学习Rxjava2,从零开始到实战(二) 线程控制
- 小白学习Rxjava2,从零开始到实战(三) 操作符
- 小白学习Rxjava2,从零开始到实战(三) 操作符
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 最简单易懂的RxJava2.0学习教程之RxJava2的基本使用(一)
- RxJava2简单使用一
- RxJava2.0使用(一)
- 零基础学习RxJava2后的总结
- Retrofit2和RxJava2的使用介绍一
- RxJava2.0的使用
- RxJava2详解(一)--基础
- mysql 去掉重复的有效操作,在对数据库做操作时请切记要做数据备份
- Adobe Photoshop CC Mac简体中文 硬解
- 并发的实质
- LeetCode OJ-20.Valid Parentheses
- KVO,NSNotification,delegate及block区别
- 小白学习Rxjava2,从零开始到实战(一) RxJava2的基础使用
- Android-edittext-XML属性
- How to contribute the code or doc to Nifi?
- 基于注解的Spring MVC控制器
- -bash: ./startup.sh: Permission denied解决
- JavaScript中的查询标识符
- Linux用户管理相关指令
- 国际体验设计大会邀请函,7月12日北京IXDC等你再聚首
- springmvc+mybatis+spring 整合 bootstrap html5 mysql oracle SSM框架源码