RxJava核心思想(看懂再学RxJava)
Posted 高、远
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxJava核心思想(看懂再学RxJava)相关的知识,希望对你有一定的参考价值。
文章目录
【1】背景知识(异步与观察者模式)
- 官网地址:https://github.com/ReactiveX/RxJava
- 在很多软件编程任务中,或多或少你都会期望你写的代码能按照编写的顺序,一次一个的顺序执行和完成。但是在ReactiveX(RX)中,很多指令可能是并行执行的,之后他们的执行结果才会被观察者捕获,顺序是不确定的。为达到这个目的,你定义一种获取和变换数据的机制,而不是调用一个方法。在这种机制下,存在一个可观察对象(Observable),观察者(Observer)订阅(Subscribe)它,当数据就绪时,之前定义的机制就会分发数据给一直处于等待状态的观察者哨兵。
- 这种方法的优点是,如果你有大量的任务要处理,它们互相之间没有依赖关系。你可以同时开始执行它们,不用等待一个完成再开始下一个(用这种方式,你的整个任务队列能耗费的最长时间,不会超过任务里最耗时的那个)。
【2】RxJava有什么作用?
- 处理异步!没错,就是这么简单,异步!将复杂的异步操作变得简单。当然是思想上的简单,代码量上不一定变得简单。
- Rx 优势可以概括为四个字,那就是 逻辑简洁。逻辑简洁并不意味着代码简洁,但是,由于链式结构,一条龙,你可以从头到尾,从上到下,很清楚的看到这个连式结构的执行顺序。对于开发人员来说,代码质量并不在于代码量,而在于逻辑清晰简洁,可维护性好,代码健壮!
【3】RxJava使用的模式:观察者模式
观察者模式是对象的行为模式,也叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 例如用过EventBus童鞋就知道,EventBus属于Publish/Subscribe模式。所以,使用RxJava也可以设计出一套事件总线的库,那就是RxBus。有兴趣的话可以在学完RxJava之后,去体验一下。这里就不细说了~
那么,RxJava也是一种扩展的观察者模式!
什么是观察者模式?举个栗子,android中View的点击监听器的实现,View是被观察者,OnClickListener对象是观察者,Activity要如何知道View被点击了?那就是派一个OnClickListener对象,入驻View,与View达成一个订阅关系,一旦View被点击了,就通过OnClickListener对象的OnClick方法传达给Activity。采用观察者模式可以避免去轮询检查,节约有限的cpu资源。
【4】 RxJava的核心思想(流的思想)
- 推荐一篇写的非常好的讲RxJava思想的文章(用工厂流水线的方式来理解 RxJava 的概念):https://github.com/xitu/gold-miner/blob/master/TODO/rxjava-production-line.md#%E7%94%A8%E5%B7%A5%E5%8E%82%E6%B5%81%E6%B0%B4%E7%BA%BF%E7%9A%84%E6%96%B9%E5%BC%8F%E6%9D%A5%E7%90%86%E8%A7%A3-rxjava-%E7%9A%84%E6%A6%82%E5%BF%B5
RxJava是一种响应式的编程。
RxJava世界中分为3中角色,分别是:
Observable
:发出一系列事件,他是事件的产生者;Operator
:是对Observable发出的事件进行修改和变换;Subscriber
:负责处理事件,他是事件的消费者;
其中我们把这个事件看做流。
下面我们举一个小例子来验证下我们的理解:
现在我们有这样一个需求:
①需要从网上加载一张图片(给出url)
②然后经过独有的压缩算法进行压缩
③再在图片上添加水印
④最后显示在屏幕上。
【5】最简单的使用:
Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void call(@NonNull Observer<Object> e) throws Exception {
//事件源业务代码
e.onNext(o);
}
}).subscribe(new Observer<Object>() {
@Override
public void onNext(@NonNull Object o) {
//订阅者业务代码
}
});
【6】 推荐阅读学习的RxJava好文
以上是关于RxJava核心思想(看懂再学RxJava)的主要内容,如果未能解决你的问题,请参考以下文章
RxJava编程思想3-(实现简易版Rxjava,如何实现线程切换)
RxJava编程思想3-(实现简易版Rxjava,如何实现线程切换)
RxJava编程思想2-(实现简易版Rxjava,如何实现操作符?)