目前RxJava很火,很多人想学习,但是看了很多博客之后发现,貌似有点难。但是看了我写的东西之后,你会发现。我靠!原来这么简单。好吧,不是别人写的不好,只是我太牛逼。嘎嘎嘎!!!
学之前。只用知道RxJava其实就是通过一个观察者来监听我们想要处理的事件。已经足矣!
下面 开始介绍RxJava:
一、两个类:Observable 事件源 也就是被监听者 也可以发送事件
Subscriber 监听者 用于监听Observable发出的事件并做处理。(其实监听者基类是Observer,但是Subscriber这个抽象类又做了很多拓展,基本都使用这个类了。)
二、Observable的创建方式:
1:通过Observable的create方法创建如下图:(此方法用于长期监听事件)
2:通过Observable.just(Object o)来创建对象(此方法只能用于处理一次该事件)
三、创建Subscriber对象:
四、让Subscriber来订阅Observable发出的事件:
1:最基本的订阅方式
2:有的时候我们想要订阅一些简单的事件,一般只会用到Subscriber中单个方法。由于我们常用的其实就是Subscriber中的onNext方法。RxJava给我们了一个简单的实现类-- Action1。我们观察订阅方法参数不难看出,他可以传入多可Action1,而且顾名思义。可以通过传入不同的参数来处理自己想要处理的事件。接下来你应该就懂了。
五、map方法的介绍:
有的时候我们接收到的数据并不是我们想要的数据,这个时候就需要将我们接收到的数据转换成我们想要的数据,例如:我们联网请求了一个json字符串,但是我们想要的其实是一个讲json封装的javabean对象。这个时候map方法就可以做这个事情。map方法就相当于做了一次中间数据处理。而且中途可以有很多个map方法。
六、flatMap方法的介绍:
上面介绍了map方法的作用,我们会发现map方法可以将事件源发出的消息做一次中间转换,但是是一对一的关系。如果现在有这么一个需求呢。例如:将hello world字符串分割成两个字符串。而且这两个字符串都需要被Action1处理到。这个时候发现map就不能满足我们的需求了。而接下来要讲的flatMap方法就可以做到。
这个方法可以这样理解:这个方法是被Observable对象调用的。但是这个方法的返回值也是一个Observable对象。什么意思呢?就是flatMap这个方法被Observable对象调用。它会使用这个对象传递过来的参数,同时根据自己的需求将这个参数转变成我们需要的参数之后再创建一个Observable对象来发送出这个消息。有可能你不是很理解,看以下代码可能就会豁然开朗了。
此处的代码只是调用了一次flatMap方法,其实和map一样,中途可调用任意次此方法。
七、RxJava中各个方法执行的线程问题:
RxJava在没有指定特定运行所在的线程的时候会默认在哪个线程订阅事件,就会在那个线程生成事件,也会在那个线程消费这个事件。以如下代码为例:
接下来介绍如何指定运行的线程,在讲这个之前说一说RxJava中已经为我们封装好的几种线程
下面我们开始讲解怎么自己随心所欲的切换线程。好吧,其实切换线程非常简单。大家看下面的代码。
从上面的代码可以看出,其实切换线程就是调用了2个方法:
subsciberOn(Schedulers.io()) 这个方法是用来限定订阅事件在那个线程走。可以狭义的理解成上图中的Observable对象中的call方法在哪里执行。
observeOn(AndroidSchedulers.mainThread()) 这个方法很多人理解的是消费事件在哪个线程走,或者以上图为例Action1中的call方法在哪里走。其实这种理解是错的!!!虽然call方法是在主线程执行,但是observeOn这个方法并不是特定来切换处理事件方法所在线程的。看如下代码你或许就明白了。
从上面的代码就可以发现,其实observe并不是只是针对处理事件的。可以理解为,obesrveOn()方法后面的代码会在此方法规定的线程中执行。
看了上面的代码,其实不难看出,RxJava中的线程真的是可以随意切换。
本篇文章介绍的RxJava的仅仅是冰山一脚、适用于初学者了解RxJava。
QQ交流群号:574537849 欢迎大家来讨论分享吹B。