rxJava使用总结

概述

RxJava是一个基于事件流、实现异步操作的库。他可以很方便的实现异步操作。
RxJava定义了 被观察者(Observable)、观察者(Observer)、订阅(Subscribe)、事件(Event)。
RxJava可以应用到网络框架Retrofit中。

使用

  1. 创建Observable & 生产事件
  2. 创建Observer & 定义相应事件行为
  3. 通过Subscribe连接被观察者观察者

基本用法

fun testObervableBase() {
        //总共分为3步
        // 1. 创建被观察值
        val observable = Observable.create(ObservableOnSubscribe<Int> {
            it.onNext(3)
            it.onNext(2)
            it.onNext(1)
            it.onComplete()
        })

        // 也可以用这种简单的形式
        // Observable.just("A", "B", "C")
        // Observable.fromArray("A", "B", "C")

        // 2. 创建观察者
        val observer = object : Observer<Int> {
            override fun onComplete() {
                Log.i(TAG, "---rxJava complete")
                ToastHelper.showToast("rxJava onComplete")
            }

            override fun onSubscribe(d: Disposable) {
                Log.i(TAG, "---rxJava subscribe $d")
            }

            override fun onNext(t: Int) {
                Log.i(TAG, "---rxJava next $t")
            }

            override fun onError(e: Throwable) {
                Log.i(TAG, "---rxJava error $e")
            }
        }

        // 3. 连接
        observable.subscribe(observer)
    }

Observable提供了创建操作符,常见的有

  • create() 常规用法
  • just() 直接发送事件,结束会自动发送onComplete事件
  • fromArray()直接发送传入的数组数据,结束会自动发送onComplete事件
  • fromIterable()直接发送传入的集合数据,结束会自动发送onComplete事件
  • empty() 仅发送onComplete事件.

其他创建

  • defer()直到有观察者(Observer )订阅时,才动态创建被观察者对象(Observable) & 发送事件。可用于动态改变事件的这种情况。
  • timer() 延迟指定时间后,发送1个数值0(Long类型)
  • interval() 发送的事件序列 = 从0开始、无限递增1的的整数序列。

变换操作符
创建以后,可以做变换,例如数据封装,类型转化等。常用有:
map() 将被观察者发送的事件转换为任意的类型事件。
flatMap() 将被观察者发送的事件序列进行 拆分 & 单独转换,再合并成一个新的事件序列,最后再进行发送。

另外,还支持多个Observable合并,例如,concat() merge()操作符,见参考资料。

功能性操作符

  • subscribe()
  • delay() 观察者延迟一段时间再发送事件
  • doXxx() 在某个事件的生命周期中调用
  • onErrorReturn 遇到错误时,发送1个特殊事件 使其正常终止,相关的还有onErrorResumeNext() onExceptionResumeNext()区别就是,会不会走onError
  • retry() 重试,即当出现错误时,让被观察者(Observable)重新发射数据。
  • repeat() 无条件地、重复发送 被观察者事件.

线程切换
默认被观察者(Observable)/ 观察者(Observer)的工作线程 = 创建自身的线程。
subscribeOn() 指定被观察者 生产事件的线程。只有第一次指定有效。
observeOn() 指定观察者 接收 & 响应事件的线程。每次指定均有效,即每指定一次,就会进行一次线程的切换。

参考资料

RxJava 实际应用讲解:网络请求出错重连
RxJava:最基础的操作符详解

你可能感兴趣的:(Android学习,Android笔记)