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世界中分为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的原理

RxJava编程思想3-(实现简易版Rxjava,如何实现线程切换)

RxJava编程思想3-(实现简易版Rxjava,如何实现线程切换)

RxJava编程思想2-(实现简易版Rxjava,如何实现操作符?)

RxJava编程思想2-(实现简易版Rxjava,如何实现操作符?)

RxJava编程思想1-(实现简易版Rxjava,如何基本功能和链式调用?)