首页 > 编程语言 >rxjava之复习

rxjava之复习

时间:2023-02-14 12:45:40浏览次数:61  
标签:map flatMap 复习 观察者 RxJava 操作符 rxjava 线程

1.rxjava之操作符

1). 转换类操作符 (map flatMap concatMap flatMapIterable switchMap scan groupBy...);
map及flatMap以及concatMap区别?
map和flatMap都可以对RxJava传入的数据进行变换。
map对数据进行变换后,可以返回任意值,map对数据的变换是1对1进行的;
flatMap对数据变换后,返回ObservableSource对象,可以对数据进行一对多,多对多的变换,flatMap并不保证数据有序。
concatMap与flatMap使用基本一致,它可以保证数据有序。

2). RxJava中的组合/合并操作符:
作用:组合多个被观察者&合并需要发送的事件。
1、类型
常见的组合/合并操作符有:
1.组合多个被观察者
a.按发送顺序:concat()、concatArray()
b.按时间: merge()、mergeArray()
c.错误处理:concatDelayError()、mergeDelayError()
2.合并多个事件
a.按数量:Zip()
b.按时间:combineLatest()、combineLatestDelayError()
c.合并成1个事件发送:reduce()、collect()
3.发送事件前追加发送事件:startWith()、startWithArray()
4.统计发送事件数量:count

3、响应式编程框架:RxJava实现原理

Rxjava概念, 常用操作符及拓展?
简介:
一款优雅的异步框架,代替之前的AsyncTask / Handler / XXX / …
其强大的操作符和链式写法,线程切换等有助于提高开发效率和快速定位Bug
与Retrofit搭配使用更是有意想不到的效果。 底层原理:观察者模式

缺点:
1:操作符太多会增加学习成本时间
2:使用不好,容易导致内存泄露(解决方式,推荐Rxlifecycle结合Rxjava,规避内存泄漏风险)

Rxjava的操作符有哪些,说说他们的作用?
just:将同种数据源组合放到被观察者上面
from:将类似数组、集合的数据源放到被观察者上面
map: 将一种数据源,转化成另外一种
flatmap:将一种数据源,转化成另外一种数据,并且被转化的数据是乱序排列的
concatmap:将一种数据源,转化成另外一种数据,并且被转化的数据是按照先前的数据源顺序排序的
toList:将数组的形式转化成List集合
subscribeOn:设置Observable的call方法所在的线程,也就是数据来源的线程
observeOn:设置subscribe的call方法所在的线程,也就是数据处理的线程
filter:在被观察者的数据层过滤数据
onErrorResumeNext:出错的时候,可以指定出错的时候的被观察者
retryWhen:出错的时候,重新走一遍被订阅的过程
concat:合并相同类型的被观察者到一个被观察者身上,有点类似集合、数组拼接数据。
zip:处理多种不同结果集的数据发射,一般用得多的地方是多个网络请求组合然后统一处理业务逻辑。 还有很多操作符就自己去看,这些操作符已经够面试用的了。

RxJava 变换操作符map  flatMap concatMap buffer?

  • map:【数据类型转换】将被观察者发送的事件转换为另一种类型的事件。
  • flatMap:【化解循环嵌套和接口嵌套】将被观察者发送的事件序列进行拆分 & 转换 后合并成一个新的事件序列,最后再进行发送。
  • concatMap:【有序】与 flatMap 的 区别在于,拆分 & 重新合并生成的事件序列 的顺序与被观察者旧序列生产的顺序一致。
  • buffer:定期从被观察者发送的事件中获取一定数量的事件并放到缓存区中,然后把这些数据集合打包发射。
RxJava中map和flatmap操作符的区别及底层实现

手写rxjava遍历数组。
你认为Rxjava的线程池与你们自己实现任务管理框架有什么区别?

3.1. RxJava 的线程切换原理
• RxJava通过subscribeOn指定被观察者发生的线程,observeOn指定观察者发生的线程。其中Schedulers.IO生成的是IoScheduler。通过观察者与被观察者订阅的过程中,首先会触发被观察者的subscribeActual方法,在该方法中,可以看到最终会走scheduler的schedule方法,所以上面提到的IoScheduler实际是调用了它的schedule方法,最终会在NewThreadWorker里面生成ScheduledExecutorService对象,
而ScheduledExecutorService实际是由ScheduledThreadPoolExecutor创建的一个核心线程,最大线程个数是Integer.MAX_VALUE的线程池。最终会由ScheduledThreadPoolExecutor的submit或schedule方法执行传过来的Runnable对象,而Runnable执行的是被观察者的subscribe方法。所以解释了被观察者的subscribe方法是在子线程中执行的。
• observeOn是观察者发生的线程,AndroidSchedulers.mainThread()实质是HandlerScheduler对象,而在观察者部分,最终观察部分会走Scheduler的scheduleDirect方法,而  HandlerScheduler的该方法里面包装了一个ScheduledRunnable对象,通过主线程的handler.postDelayed处理这个runnable对象。

标签:map,flatMap,复习,观察者,RxJava,操作符,rxjava,线程
From: https://www.cnblogs.com/awkflf11/p/17119195.html

相关文章

  • okhttp之复习
    一okhttp 1.简介:官方简介:OkHttp是一个默认高效的HTTP客户端1、HTTP2支持允许对同一主机的所有请求共享一个套接字。2、透明GZIP缩小了下载大小。3、连接池减少了请求......
  • 【C++复习】运算符重载中的特殊运算符
    无法被重载类属关系运算符 .成员指针运算符 .*作用域分辨符 ::三目运算符 ?:只能通过成员函数重载赋值运算符=方括号[]圆括号()指向结构体成员运算符->......
  • 【C++复习】同名函数判断条件(重载,隐藏,覆盖)
    1、重载以下条件要全部满足:函数名相同以下条件满足其1:函数形参数目不同函数形参类型不同注意:不看返回值调用形式要不同//下面两个函数不能重载fun(inta,......
  • ut之复习
    先简单了解一下单元测试,对软件中的最小可测试单元进行测试,一般是函数。接下来说说它的作用,(1)能够验证程序的准确性,为开发提供保障,能放心大胆的修改和重构。(2)能规范我们的设......
  • 【C++复习】运算符优先级(简)
    不同优先级的运算符混在一起,就根据优先级算相同优先级的运算符混在一起,就看它们的结合性(这里不谈)1、运算符有哪些?单目运算符*++自增,有前置和后置--自减,有前置和后置......
  • JavaScript的原型、原型链、异步与单线程复习回顾
     原型和原型链有对象的地方就有原型,每个对象都会在其内部初始化一个属性,就是prototype(原型),原型中存储共享的属性和方法。当我们访问一个对象的属性时,js引擎会先看当......
  • Java基础day6复习-Debug的学习
    1.Debug模式1.1什么是Debug模式是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。1.2Debug模式操作流程如何加断点......
  • 期末复习 | CUMT数据结构实验期末——精简版题解
    前言该博客保存了博主本人的刷题记录,博客中题源来自学长博客和CUMTOJ,但是由于本人记性不好,忘记了CUMTOJ的密码TT,如有错误敬请指正!该博客的解题代码很大程度上参照了Acwi......
  • 期末复习 | CUMT数据结构理论
    数据结构复习基础知识O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)线性表掌握顺序表的存储结构以及基本操作操作的代码实现以及它的优缺点——代码......
  • 期末复习 | CUMT计算机组成原理
    计算机组成原理期末复习提纲本复习提纲完全参考MaHaibo老师发的复习资料第一章计算机系统概论冯若依曼计算机组成主要设计思路:数制采用二进制,按照程序顺序进行主要组......