【Android】RxJava系列01-基本概述和基本用法

少年啊,要永远相信美好的事情即将发生

【Android】RxJava系列01-基本概述和基本用法

    • 1.RxJava的概述
    • 2.RxJava的作用
    • 3.观察者和被观察者
    • 4.背压
    • 5.RxJava的基本用法
      • 步骤一,创建Observer(观察者)
      • 步骤二,创建Observable(被观察者)
      • 步骤三,Subscribe(订阅)

1.RxJava的概述

RxJava是什么?是ReactiveX的一种Java实现。
那,ReactiveX又是什么,我来与君言。
ReactiveX 是 Reactive Extensions的缩写,一般简写为Rx,就这?确实就这。但是微软给出的定义是,Rx是一个函数库,让开发者可以利用可观察序列和LINQ(Language Integrated Query)风格查询操作符来编写异步和基于事件的程序。开发者可以利用Observables 表示异步数据流,用LINQ操作符查询异步数据流,用Schedulers参数化异步数据流的并发处理,Rx可以这样定义:Rx = Observables + LINQ +Schedulers
【Android】RxJava系列01-基本概述和基本用法_第1张图片
啊?这这这。定义总是这么抽象,记住Rx是可观察,能异步处理数据流程序的函数库就行了

2.RxJava的作用

大家平时开发中很多场景会用到异步操作,在Android中,我们会用到AsyncTask和Handler,或者创建callback来回调,但是随着请求的数量越来越多,代码逻辑会变得复杂,对阅读代码人来说就是一种“回调地狱”。通过使用RxJava仍旧能保持清晰的逻辑。RxJava的原理是创建一个Observable对象来“干活”,然后使用各种操作符建立起来的链式操作,就如流水线一样,如德芙一样丝滑,把你想要处理的数据一步一步地加工成你想要的成品,之后发送给Subscriber处理(哟,介么帅)。

3.观察者和被观察者

RxJava的异步操作是通过扩展的观察者模式来实现的。
在RxJava中,Observable代表了被观察者,Observer代表了观察者,在RxJava 3.x中有以下几个被观察者

  • Observable:发送0个或N个数据,不支持背压。
  • Flowable:发送0个或N个数据秒支持背压,它是在RxJava2之后才有的新类型。
  • Single:只处理OnSuccess和onError事件,只能发送单个数据或者发送一个错误。
  • Compleable:Compleable在创建后,不会发送任何数据,只处理onComplete和onError
  • Maybe: 能够发送0个或1个数据。它是在RxJava

4.背压

什么是背压?
背压指的是,在异步场景中,被观察者发送事件的速度远快于观察者处理事件速度的情况下,一种告知上游的被观察者降低发送速度的策略。
从RxJava 2 开始,Observable不再支持背压,而是新增了被观察者Flowable支持背压。Flowable中的操作符和Observable类似,其所有的操作符均强制支持背压。

5.RxJava的基本用法

以RxJava3为例,引入依赖

    implementation("io.reactivex.rxjava3:rxandroid:3.0.0")
    implementation("io.reactivex.rxjava3:rxjava:3.0.0")

其中,RxAndroid是RxJava在Android平台的扩展,它包含了一些能够简化Android开发的工具。
RxJava的基本用法分为3个步骤

步骤一,创建Observer(观察者)

它决定事件触发的时候将有怎样的行为,代码如下所示

        val observer = object : Observer {
            override fun onSubscribe(d: Disposable) {
                Log.e(TAG, "onSubscribe d ${d.isDisposed} ")
            }

            override fun onError(e: Throwable) {
                Log.e(TAG, "onError e $e ")

            }

            override fun onComplete() {
                Log.e(TAG, "onComplete")

            }

            override fun onNext(t: String) {
                Log.e(TAG, "onNext t: $t")

            }

        }
  • onComplete:事件队列完结,RxJava不仅把每个事件单独处理,而且还会把它们看作一个队列。当不会有新的onNext发出时,需要触发onComplete方法作为完成标志。
  • onError:事件队列异常。在事件处理过程中出现异常时,onError方法会触发,同时队列会自动终止,不允许再有事件发出,
  • onNext:普通的事件。将要处理的事件添加到事件队列中
  • onSubscibe:当订阅时会被调用

步骤二,创建Observable(被观察者)

它决定什么时候触发事件以及触发怎样的事件,RxJava使用create方法来创建一个Observable,并为它定义事件触发规则,代码如下所示:

        /**
         * 基本创建方式
         */
        val observable = Observable.create { emitter ->
            emitter.onNext("新年快乐")
            emitter.onNext("龙年吉祥")
            emitter.onComplete()

        }

通过调用subscribe的方法,不断地将事件添加到任务队列中,也可用just方法来实现:

        /**
         * 通过 just 创建
         */
        val observable2 = Observable.just("你好","我是保安队长")

步骤三,Subscribe(订阅)

订阅只需要一行代码就可以了,如下所示:

        observable.subscribe(observer)

通过create创建,输出日志如下:

	  onSubscribe d false
	  onNext t: 新年快乐
	  onNext t: 龙年吉祥
	  onComplete

通过just创建,输出日志如下:

     onSubscribe d false
	 onNext t: 你好
	 onNext t: 我是保安队长
	 onComplete

两种方式都是一样,先调用onSubscribe方法,接着调用两个onNext方法,最后调用onComplete方法。

今天的学习学习到此收尾啦,万事开头难,继续坚持,后续学习RxJava常用的操作符
【Android】RxJava系列01-基本概述和基本用法_第2张图片

你可能感兴趣的:(RxJava,android,rxjava)