当前位置:   article > 正文

RxJava使用总结_flowable.subscribeon

flowable.subscribeon

##.简介

    RxJava是是一个基于事件流处理来实现异步操作的库。对于需要切换线程来异步处理的场景,能够简化代码编写,提高代码可读性。官网地址: ReactiveX

一、使用流程概括和示例

1.它是按照观察者模式来设计的

    被观察者负责生产事件,观察者负责处理事件,一旦观察者 订阅了 被观察者,就会触发被观察者发送事件流。
    这里的“事件”是一个抽象概念,它的载体是一个数据结构(例如String/Object/自定义对象等),传递的实际上是数据,只是在观察者模式中它们的角色是“事件”。事件流对应的,是要传递的数据流。
    RxJava使用基于事件流的链式调用,事件“从上游流向下游”,中间可以多次做各种处理和变换,最终流到最下游被处理掉。最初的被观察者是事件流的源头,而观察者位于事件流的最下游。

2.使用流程和示例

大致可分为3步:
1)创建被观察者,编写事件生产和发送逻辑;
    通过事件发射器 FlowableEmitter的onNext()/onComplete()/onError()等来传递事件。
2)创建观察者,编写事件处理逻辑;
    通过自己的 onNext()/onComplete()/onError()等来接受事件并处理。
    注意:上游事件发送正常结束时 onComplete()被调用, onError()在出错时被调用,二者出现时都意味着事件流处理结束,但二者只会有一个被调用到。
3)观察者 订阅 被观察者,触发 被观察者生产和发送时间,然后观察者接收事件并处理。
代码示例和注释讲解:
  1. /**
  2. * 1.创建被观察者
  3. * 有多种创建方式,这是其中较常见一种,通过Create()方法创建
  4. * 第二个参数是背压策略
  5. */
  6. Flowable<String> flowable = Flowable.create(new FlowableOnSubscribe<String>() {
  7.     /**
  8.      * 被订阅后,会触发调用该方法
  9.      * @param emitter   事件发射器,可通过它将事件传递给观察者
  10.      * @throws Throwable
  11.      */
  12.     @Override
  13.     public void subscribe(@NonNull FlowableEmitter<String> emitter) throws Throwable {
  14.         //通过onNext()方法来传递事件(数据)
  15.         emitter.onNext("aaa");
  16.         emitter.onNext("bbb");
  17.         emitter.onNext("ccc”);
  18.         //调用onComplete(),意味着事件流发送已结束
  19.         //后面再调用onNext()也不会再将事件发送出去
  20.         emitter.onComplete();
  21.     }
  22. }, BackpressureStrategy.ERROR);
  23. /**
  24. * 2.创建观察者
  25. */
  26. FlowableSubscriber<String> flowableSubscriber = new FlowableSubscriber<String>() {
  27.     /**
  28.      * 一旦订阅,会首先调用该方法
  29.      * 传入的参数s是Subscription类型,对应的是"订阅"这个抽象概念
  30.      * 通过调用Subscription.cancel()可以取消订阅,停止事件流发送和接收
  31.      * @param s
  32.      */
  33.     @Override
  34.     public void onSubscribe(@NonNull Subscription s) {
  35.     }
  36.     /**
  37.      * 通过该方法将数据传递过来
  38.      * @param s
  39.      */
  40.     @Override
  41.     public void onNext(String s) {
  42.         //.....处理数据.....
  43.     }
  44.     /**
  45.      *
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/177384
推荐阅读
相关标签
  

闽ICP备14008679号