Android RxJava原理分析

Android RxJava原理分析团队并行开发 每个人对自己模块的 api 进行封装 然后利用 Retrofit 的 create 方法创建出对应的 apiservice 进行网络请求 各个模块都需要含有 apiservice 实例的简单单例封装 那么多个模块就有多个单例 这个时候就需要工厂模式进行设计

1.RxJava主要作用

帮你优雅的处理异步逻辑。RxJava是处理异步逻辑的利器,以往我们处理异步时,需要创建一个线程,传入callback或者listener,线程处理完任务后通过callback、listener、notify或者发送广播去通知UI线程和其他线程。使用RxJava可以在一个方法体内完成这所有逻辑。

 List 
  
    strings = new ArrayList<>(); for (int i = 0; i < 10000; i++){ strings.add(String.valueOf(i)); } Observable.from(strings) .map(new Func1 
   
     () { @Override public Integer call(String s) { return Integer.parseInt(s);//将string转为int } }) .observeOn(Schedulers.newThread())//在子线程中完成 .subscribeOn(AndroidSchedulers.mainThread())//在UI线程打印 .subscribe(new Subscriber 
    
      () { @Override public void onCompleted() { //list转换完成 } @Override public void onError(Throwable e) { //error } @Override public void onNext(Integer integer) { Log.i("test", "转换后的值为:"+integer);//打印10000次 } }) 
     
    
  

10000次string转int在子线程完成,并在主线程打印结果。

咋一看,并不会比起一个子线程传入一个callback来的迅速,代码量差不多,而且RxJava晦涩难懂,但是比较复杂的逻辑,比如,网络请求成功后数据保存到本地数据库,网络请求失败时提取本地数据库缓存的数据,等等,需要多个异步进行交互的逻辑,使用RxJava会让逻辑异常的清晰。


2.RxJava的原理

其实RxJava的原理就是一个高度解耦的观察者模式,订阅subscribe你关心的Observerable对象,你可以对这些对象进行操作和全程监控。


3.RxJava源码分析

我们先来分析一下RxJava的工程目录

Android RxJava原理分析


从源码结构上看无非是观察者Observer/Subscriber、被观察者Observerable、以及与订阅/观察相关的功能类:

annotations是相关注解

exceptions

functions 主要是订阅相关的接口类,比如Action1、Func0等

internal是内部使用的util、operaters的综合,方便将订阅关系捋顺,比较重要

observerable包主要是专门为某种场景定制的Oberverable类

observer包特定的订阅者及集合

schedulers包有关异步逻辑的线程关系

subjects包订阅中间产生的对象

subscriptions包是订阅集合,网络调用常用到


上述最最最核心的就是Observerable类了,光代码就有上万行,不过先不要慌,内部是很有条理的,我们下面继续看。

Observerable类包含三类方法

a.产生Observerable被观察者的方法,主要的有create、just、list等

b.对Observerable进行中间变换的方法,我们比较熟悉的是map、flatMap、lift、merge、zip、startwith、take

ab类方法的特征是都返回Observerable

对象

c.订阅方法,返回subscriptiond订阅对象

Observerable类是所有异步处理的开始、进行和结束,是核心类,理解了这个类就理解了RxJava。

Observerable类的众多方法中总有一款适合用来处理你的异步逻辑,有兴趣的可以深入的研究一下这些方法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208091.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午12:22
下一篇 2026年3月19日 下午12:23


相关推荐

  • LMDB概述

    LMDB概述2019独角兽企业重金招聘Python工程师标准>>>…

    2026年4月18日
    6
  • C 中的MDI 窗体

    C 中的MDI 窗体SDI 窗体 Single document interface 正常创建出来的窗体 MDI 窗体 multiple document interface 多文档界面 用于同时显示多个文档 MDI 子窗体的创建避免了用户打开很多窗口的时候任务程中挤满了窗体 MDI 窗体的使用方法确定一个副窗体 把窗体的 IsMdiContain 属性设置为 true 创建

    2026年3月18日
    2
  • java环境变量需要在系统中做哪些设置(linux配置java环境变量)

    1.为什么要说这个问题?想起来两年前刚学习Java时,被要求先要设置环境变量,自然不解,随后网上找答案。现在想来感觉当时看到的答案都是神神叨叨,含糊不清,没有几个说的明明白白的。当然也有可能是当时的我没看明白吧…总之,相信我,看了我的博客,你不用再找别的地方了!2.环境变量环境变量就是英文直译:EnvironmentVariable。变量知道吧?对,就是可以随意给其赋值的一个存储单

    2022年4月11日
    48
  • spring cloud 配置中心配置哪些东西_druid连接池配置优化

    spring cloud 配置中心配置哪些东西_druid连接池配置优化访问http://localhost:8761/访问http://localhost:8761/访问http://localhost:8889/writer

    2025年7月7日
    5
  • 单片机最小系统的通俗易懂讲解

    单片机最小系统的通俗易懂讲解我是一名单片机工程师,下面的讲解你参考一下.51单片机共有40只引脚.下面这个就是最小系统原理图,就是靠这四个部分,这个单片机就可以运行起来了.(看下面的数字标记,1234)我们来一,一讲解一下:1第一部分:电源组(标记为1的部分)40脚接电源5V(右上角),20脚接电源负极(左下角),在单片机里面,负极也可以叫GND或者”地”,我们在单片机的应用中,习惯说负极为”地”,上面GND就…

    2022年6月5日
    49
  • ChatGPT 国内使用保姆教程,含GPT

    ChatGPT 国内使用保姆教程,含GPT

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号