Android开发之路 - RxJava基础

前言

人真是一种可怕的动物,每个人都能专注 在做他喜欢的事的时候,入职新的公司很忙,最近一直在学东西,基本上都是用到啥就看一看,根本没时间总结写博客。

认识RxJava

RxJava是一个Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库,在Android的开发中一般就是使用他的操作符配合Retrofit实现异步的网络请求。

作用

相当于Android中的handler和AsyncTask等实现异步的操作

特点

  • 逻辑简洁
  • 实现优雅
  • 使用简单

    更重要的是随着逻辑的复杂他依然可以保持它的特性使逻辑清晰

原理

RxJava的设计的原理就是观察者和被观察者 被观察者产生要处理的时间观察者对产生的事件进行处理 他们之间通过订阅来建立联系

  • 事件:被观察者和观察者之间的沟通的载体
  • 被观察者:产生事件的事件元
  • 观察者:对观察者产生的事件进行处理
  • 订阅:建立二者之间的联系

简单的使用

1 使用的步骤是

这里写图片描述

2 具体的实现的代码

 /***
         * RxJava 实现的是异步的网络操作 同时支持线程指之间的切换
         * 创建被观察者   发送是事件要被处理的事物
         * create() 是最基本的创建RxJava的方法 通过实现接口的subscribe()定义发送的事件
         */
        val observable = Observable.create(object : ObservableOnSubscribe<Int> {
            /***
             * ObservableEmitter 是一个事件发送器 作用是用来发送事件的
             */
            override fun subscribe(e: ObservableEmitter<Int>?) {
                e!!.onNext(1)
                e!!.onNext(2)
                e!!.onNext(3)
                e!!.onNext(4)
                e!!.onNext(5)
                e!!.onNext(6)
                e!!.onComplete()
            }
            /***
             * subscribeOn() 指定的是被观察者运行的线程
             * observeOn() 指定的是观察者运行的线程
             * Schedulers.io() 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作
             * Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作
             * Schedulers.newThread() 代表一个常规的新线程
             * AndroidSchedulers.mainThread() 代表Android的主线程
             */
//            订阅的关系的建立
        }).subscribe(object : Consumer<Int> {
            override fun accept(t: Int?) {
//               正常的事件处理逻辑
            }
        }, object : Consumer<Throwable> {
            override fun accept(t: Throwable?) {
//              异常的情况下的处理逻辑
            }
        })

本实例在建立了订阅的关系之后通过两个RxJava提供的函数对接收的数据处理和对异常信息的处理
RxJava提供了一系列的函数式接口实现简单的观察者
这里写图片描述

Subscribe的一系列重载方法

 public final Disposable subscribe() {}
    // 表示观察者不对被观察者发送的事件作出任何响应(但被观察者还是可以继续发送事件)

    public final Disposable subscribe(Consumer<? super T> onNext) {}
    // 表示观察者只对被观察者发送的Next事件作出响应
    public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {} 
    // 表示观察者只对被观察者发送的Next事件 & Error事件作出响应

    public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}
    // 表示观察者只对被观察者发送的Next事件、Error事件 & Complete事件作出响应

    public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}
    // 表示观察者只对被观察者发送的Next事件、Error事件 、Complete事件 & onSubscribe事件作出响应

    public final void subscribe(Observer<? super T> observer) {}
    // 表示观察者对被观察者发送的任何事件都作出响应

对观察者方法的重载是得我们可以支队我们关心的事件做处理 ,就是更加人性化

猜你喜欢

转载自blog.csdn.net/xh_ssh/article/details/79501140