RxJava2系列(一) 简单使用

论坛 期权论坛     
选择匿名的用户   2021-5-23 02:15   0   0
<h1><span style="color:#f33b45;"><strong>一、基本概念</strong></span></h1>
<p>                 <img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-30b2c58b728cc178e7e52a0bd1082fb4.png"></p>
<h2>1、定义    </h2>
<p style="text-indent:33px;">RxJava在GitHub上《<a href="https://github.com/ReactiveX/RxJava">RxJava</a>》的自我介绍是:a library for composing asynchronous and event-based programs using observable sequences for the Java VM.(一个在Java VM 上使用可观测的序列来组成异步的,基于事件的程序的库),有些人可能感到疑惑,其实本质上可以用一词来概括——“<strong>异步</strong>”,它就是一个异步的操作库,而别的定语都基于这之上。</p>
<h2>2、优点</h2>
<p style="text-indent:33px;"><strong>简洁</strong></p>
<p style="text-indent:33px;">异步操作很关键的一点是简洁性,因为在调度过程比较复杂的情况下,异步代码既难写也难读懂。Android创造的Handler和AsyncTask其实都是为了让异步代码更加简洁,RxJava的优势也是简洁,它的特别之处是:<strong>随着程序代码逻辑的变得越来越复杂,它依然保持简洁。</strong>         </p>
<p style="text-indent:33px;"><strong>响应式编程</strong></p>
<p style="text-indent:33px;">它是一种基于异步数据流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一条流合并为一条新的流。</p>
<p style="text-indent:33px;">响应式编程的一个关键概念是事件。事件可以被等待,可以触发过程,也可以触发其它事件。事件是唯一的以合适的方式将我们的现实世界映射到我们的软件中:如果屋里太热了我们就打开一扇窗户。同样的,当我们的天气app从服务端获取到新的天气数据后,我们需要更新app上展示天气信息的UI;汽车上的车道偏移系统探测到车辆偏移了正常路线就会提醒驾驶者纠正,就是是响应事件。</p>
<p style="text-indent:33px;">今天,响应式编程最通用的一个场景是UI:我们的移动App必须做出对网络调用、用户触摸输入和系统弹框的响应。在这个世界上,软件之所以是事件驱动并响应的是因为现实生活也是如此。</p>
<p style="text-indent:33px;"> </p>
<h1><span style="color:#f33b45;">二、基本使用</span></h1>
<h2><strong>1、观察者模式</strong></h2>
<p style="text-indent:33px;"><span style="color:#3399ea;">观察者模式</span>面向的需求是:A对象(观察者)对B对象(被观察者)的某种变化高度敏感,需要在B对象变化的一瞬间做出变化。程序的观察者模式,观察者不需要时刻盯着被观察者,而是采用<strong>注册(Regsiter)</strong>或者<strong>订阅(Subscribe)</strong>的方式,告诉被观察者,我是你的某种状态,你的状态在发生变化的时候来通知我。</p>
<ul><li>Observable ( 被观察者 ) / Observer ( 观察者 )</li><li> <p><em>Flowable (被观察者)/ Subscriber (观察者)</em></p> </li></ul>
<p>             <img alt="" height="414" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-24ae1c8a6befe5e8cf4daef26b88f631.png" width="600"></p>
<h2><strong>2、背压</strong></h2>
<p style="text-indent:33px;">背压是指在异步场景中,被观察者发送事件速度远快于观察者的处理速度的情况下,一种告诉上游的被观察者降低发送速度的策略。简而言之,<strong>背压是流速控制的一种策略</strong>。</p>
<p style="text-indent:33px;"><em>由于基于FLowable发射的数据流,以及对数据加工处理的各种操作符都添加的背压支持,附加额外的逻辑,其运行效率要比Observable慢的多。</em></p>
<p style="text-indent:33px;"><span style="color:#f33b45;">大数据流用Flowable,小数据流用Observable</span></p>
<p> 51 回复</p>
<h2><strong>3、三部曲</strong></h2>
<ul><li>第一步:初始化 Observable         <span style="color:#86ca5e;">  <em>//观察者,它决定事件发生时有怎么样的行为;</em></span></li><li>第二步:初始化 Observer              <span style="color:#86ca5e;"><em> // 被观察者,它决定什么时候出发事件以及触发什么样的事件;</em></span></li><li>第三步:建立订阅关系subscribe() <span style="color:#86ca5e;"><em> //订阅,将Observer和Observable关联起来。</em></span></li></ul>
<pre class="blockcode"><code class="language-java">        //1、创建被观察者Observable
        Observable&lt;String&gt; observable &#61; Observable.create(new ObservableOnSubscribe&lt;String&gt;() {
            &#64;Override
            public void subscribe(ObservableEmitter&lt;String&gt; e) throws Exception {
                e.onNext(&#34;1&#34;);
                e.onNext(&#34;2&#34;);
                e.onNext(&#34;3&#34;);
                e.onComplete();
            }
        });

        //2、创建观察者Observer
        Observer&lt;String&gt; observer &#61;
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP