首页 > 编程语言 >RxJava2.x的理解与总结

RxJava2.x的理解与总结

时间:2023-01-30 19:55:06浏览次数:66  
标签:总结 onComplete onNext 观察者 RxJava2 理解 线程 io emitter

RxJava2.x的理解与总结

RxJava是一个基于观察者设计模式将链式编程和异步结合在一起的开源库。

链式编程

通过查看GitHub开源项目的简介开源知道,RxJava有几个基类。
他们分别适用于不同的场景

  1. io.reactivex.rxjava3.core.Flowable
  2. io.reactivex.rxjava3.core.Observable
  3. io.reactivex.rxjava3.core.Single
  4. io.reactivex.rxjava3.core.Completable
  5. io.reactivex.rxjava3.core.Maybe

上示例代码:

//被观察者
Observable.create(object : ObservableOnSubscribe<String> {
    override fun subscribe(emitter: ObservableEmitter<String>) {
        emitter.onNext("1")
        emitter.onNext("2")
        emitter.onNext("3")
        emitter.onComplete()
        emitter.onComplete()
        println("create-Looper:" + (Looper.getMainLooper() == Looper.myLooper()))
    }
}).subscribeOn(Schedulers.io())//被观察者执行在什么线程线程
    .observeOn(AndroidSchedulers.mainThread())//观察者执行在什么线程线程
    //建立订阅关系
    .subscribe(object : Observer<String> {
        override fun onSubscribe(d: Disposable) {
            println("onSubscribe-Looper:" + (Looper.getMainLooper() == Looper.myLooper()))
        }

        override fun onNext(s: String) {
            println("onNext$s")
        }

        override fun one rror(e: Throwable) {
            println("onError")
        }

        override fun onComplete() {
            println("onComplete")
        }
})

Observable

Observable中文意思就是被观察者,通过create方法生成对象,里面放的参数ObservableOnSubscribe,可以理解为一个计划表,泛型T是要操作对象的类型,重写subscribe方法。然后在其中写准备完成的事情(任务),当你执行这些任务的时候,订阅了这个对象的观察者就会收到消息。
然后subscribe有一个传参,他有3个方法,分别是onNext();onError();onComplete();
其中onNext();可以无线调用,Observer都能收到。onComplete();可以多次调用,但Observer只接受一次;onError();只能调用一次,第二次将出现异常

Observer

通过new创建一个Observer并实现其中的方法:onNext();onError();onComplete();。看到这3个方法,就能猜到是做什么的了。
如上面所说,当Observable通过subscribe的传参执行onNext()等方法时,Observer的这些方法就会被执行。

这个关系就像音乐软件的歌手、音乐人,和关注他们的听众,当音乐人发布新歌时,听众就会收到通知。

Scheduler

RxJava是支持异步的,但要如何做到呢?这就需要讲到Scheduler,中文翻译过来就是调度器。
它是用来控制线程的,如果没有设置Scheduler,RxJava遵循哪个线程产生,就在哪个线程消费的原则,即观察者和消费者是在同一个线程。

如果需要前台调用,后台执行。那么就需要用到Scheduler了,
.observeOn(AndroidSchedulers.mainThread())表示观察者执行在什么线程
.subscribeOn(Schedulers.io())表示被观察者执行在什么线程线程

参考文章:https://www.jianshu.com/p/cd3557b1a474

深入参考文章:https://blog.csdn.net/yang_study_first/article/details/111085666

标签:总结,onComplete,onNext,观察者,RxJava2,理解,线程,io,emitter
From: https://www.cnblogs.com/VoidCom/p/17077119.html

相关文章

  • 2023/1/30 考试总结
    7.30~7.50啥也不会,摆大烂。8.00~8.30T3应该是经典容斥,但是转移顺序怪怪的。似乎走到每个点的组合唯一,然后组成新的坐标系就能做了。8.30~9.50细节比较多,调了半天。1......
  • 01快速理解anaconda
    1.anaconda可以干什么anaconda就是一个集成了一些第三方库的python,不仅可以用来进行普通python开发,还可以进行机器学习,数据分析等,可以说是一个升级版的python2.anaconda......
  • 通过一个示例形象地理解C# async await异步
    前言相信大家看过不少讲C#asyncawait的文章,博客园就能搜到很多,但还是有很多C#程序员不明白。如果搞不明白,其实也不影响使用。但有人就会疑惑,为什么要用异步?我感觉它更......
  • 掌握hashtable,深度理解python字典的数据结构
    文章目录​​1.hash函数​​​​2.hashtable​​​​2.1链地址法实现hashtable​​​​2.2解决冲突​​​​2.3开放寻址法实现hashtable​​​​2.4逻辑删除key​​​......
  • python 中异常类型总结
    异常类型:异常名称描述BaseException       所有异常的基类SystemExit          解释器请求退出KeyboardInterrupt    用户中断......
  • 深度学习基础课:总结
    大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序线上课程资料:本节课录像回放加QQ群,获得......
  • ASP.NET Core RESTful学习理解
    一、了解什么是RESTREST是“REpresentationalStateTransfer”的缩写,表述性状态传递;REST是一种软件架构风格,用于构造简单、可靠、高性能的WEB应用程序;REST中,资源(Resou......
  • 简述你对 input()函数的理解?
    在 Python3  中,input()获取用户输入,不论用户输入的是什么,获取到的都是字符串类型的。在Python中有raw_input()和input(),raw_input()和Python3中的input()作......
  • 理解DirectByteBuffer
     在下图中的第四步,内核会调用iov_iter_copy_from_user_atomic函数将用户空间缓冲区DirectByteBuffer中的待写入数据拷贝到pagecache中。但是内核又不能直接......
  • 装饰者模式和适配器模式的差异理解
    有一个基础类a,装饰者是为了增强a的功能,而适配器则是为了实现a无法实现的功能,将a当做自己的一部分。先将环境转换成a能够发挥功能的环境,然后再使用a的功能,组合起来完成想要......