文章目录
Rxjava的Github:https://github.com/ReactiveX/Rxjava
参考:
Android Rxjava:这是一篇 清晰 & 易懂的Rxjava 入门教程:https://www.jianshu.com/p/a406b94f3188
什么是RxJava
一个可观测的序列来组成异步的、基于事件的程序的库。(简单来说:它就是一个实现异步操作的库)
1 Rxjava简介
1.1 为什么要用Rxjava与RxAndroid
- Rxjava提高工作效率
- Rxjava能优雅的解决复杂的业务场景
- Rxjava越来越流行
1.2 需要知道哪些东西
- 了解什么事响应式编程
- 了解Rxjava 与RxAndroid是什么关系
- 了解Rxjava的历史来源
- 清楚知道Rxjava与RxAndroid的关系
- 学会在项目中如何使用Rxjava与RxAndroid
1.3 Rxjava的相关文档
-
Rxjava项目地址: https://github.com/ReactiveX/Rxjava
-
Rxjava经典资料:https://github.com/lzyzsd/Awesome-RxJava
1.4 学习Rxjava 的难易程度
RxJava是非常热门的函数响应式编程库,在Android开发中已经非常流行了刚开始上手会有点难,但只要理解了它,不使用RxJava写异步请求的话,就感觉各种不爽
- 总结: Rxjava有门槛 入行需谨慎
1.5 Rxjava历史来源
Netflix公司遇到了问题,把微软的响应式编程引入到java语言中 ,最终把微软的rx库引入到java中来。
1.6 Rxjava特点
-
<1M
-
轻量级框架
-
支持java8
-
支持同步异步
-
基于观察者模式来展开
1.7 观察者模式
1.8 Rxjava的观察者模式扩展
-
onCompleted()事件
-
onError()事件
-
组合不是嵌套,避免毁掉地狱
1.9 RxAndroid
RxAndroid是RxJava的一个针对Android平台的扩展,主要用于 Android 开发。
1.10 Rxjava 使用模板
Observable.from(folders)
.flatMap((Func1) (folder) -> { Observable.from(file.listFiles()) })
.filter((Func1) (file) -> { file.getName().endsWith(".png") })//判断是文件否是 图片
.map((Func1) (file) -> { getBitmapFromFile(file) }) // 将图片文件加载成Bitmap
.subscribeOn(Schedulers.io())//指定上面的读写文件发生在子线程
.observeOn(mainThread())//切换至主线程 为后面显示bitmap做准备
.subscribe((Action1) (bitmap) -> { imageCollectorView.addImage(bitmap) });
//显示到UI
2 操作符简介
-
创建操作符
-
变换操作符
-
过滤操作符
-
合并聚合操作符
-
条件操作符
-
异常操作符
2.1 创建操作符
-
create
-
just
-
fromArray
-
emty
-
defer
-
interval
-
timer
2.2 变换操作符
作用 将事件类型转换成我们所要的结果类型
-
Map
-
FlatMap
-
GroupBy
-
Buffer
-
Scan
-
Window
2.3 过滤操作符
作用 :对多个事件进行过滤
-
filter
-
take
-
Distinct
-
ElementAt (指定)
3 背压
背压就是生产者(被观察者)的生产速度大于消费者(观察者)消费速度从而导致的问题,生产速度与消费者速度的一个比值。
举一个简单点的例子:
如果被观察者快速发送消息,但是观察者处理消息的很缓慢,如果没有特定的流(Flow)控制,就会导致大量消息积压占用系统资源,最终导致十分缓慢,当发生大量的网络请求时,网速比较慢的情况下由于不能及时处理请求,会导致请求积压下来,这就是我们要面临的背压。