RxJava与Retrofit相结合:
(一)Rxjava2+Retrofit完美封装 - smily的博客 - CSDN博客
(二)Rxjava2+Retrofit之Token自动刷新 - smily的博客 - CSDN博客
RxJava实际运用:
GitHub - zhihu/zhihu-rxjava-meetup: 知乎 x RxJava Meetup
对应视频:
Jiaheng的个人频道 - 视频列表
给 Android 开发者的 RxJava 详解
概念:
RxAndroid是Rxjava的分支,专门用于Android的开发(实际也就比Rxjava多了几个类,比如Android端的调度器,LOOP等,多了些,主线程的操作),RX是一种编程理念,叫响应式编程,在不同编程语言有不同的实现
响应式编程(函数式编程):
方法的参数还是一个方法(不用再写匿名内部类,创建对象等等操作)
observebles(响应式):
就是根据某种状况,做对应的操作,比如有人在你面前跌倒,你条件反射的去拿手机录像...
我们做Android开发直接用RxAndroid即可,不过搭建环境时,Rxjava也要关联
官方源码地址:
1.GitHub - ReactiveX/RxJava: RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
2.GitHub - ReactiveX/RxAndroid: RxJava bindings for Android
RxAndroid详细介绍: 【推荐】拆 JakeWharton 系列一之 RxAndroid
MVP,Retrofit,RxJava : 浅淡MVP的实战演习,让代码结构更简单~
github官方介绍:
> a library for composing asynchronous and event-based programs by using observable sequences.
> 一个在运行在Java VM上的库, 通过可观测的序列来组成一个异步的、基于事件的程序。
特色:观察者模式,lambada表达式,使用stream特性操作集合,进行异步操作(完全替代AsyncTask),用到很多Java1.8的新特性
* 解决问题:
> 让复杂的程序逻辑回归简单、清晰,不用在考虑什么同步,异步的事情
* Observable(被观察者) 和Subscriber(订阅者) 可以做任何事情
- Observable可以是一个网络请求,Subscriber来显示请求结果;
- Observable可以是一个数据库查询,Subscriber来显示查询结果;
- Observable可以是按钮点击事件,Subscriber来响应点击事件;
- Observable可以是大图片文件的加载解析, Subscriber来展示解析后的图片。
* RxJava 的四个基本概念:观察者设计模式
- Observable (可观察者/被观察者)
- Observer (观察者/订阅者)
- subscribe (订阅)
- Event (事件)
Rxjava=observables+Lambda+Stream+Schedulers
RxJava的核心类
* Observable可观察者/被观察者
* Observer/Subscriber观察者/订阅者
一般我们用Subscriber更多,他不仅有observer有的方法,也包含了Observer方法没有的方法
*操作符(Operators)(常用的)
- map 转换对象
- flatMap 平铺对象
- filter 过滤
- distinct() 去重复(独特的)
- take(int i) 从开始取出固定个数
- doOnNext 输出元素之前的额外操作(不常用)
- toList() 打包对象为集合
*调度器(Scheduler), 用于线程控制
- Schedulers.immediate() 默认线程
- Schedulers.newThread() 每次都创建新的线程执行
- Schedulers.io() 包含线程池的机制, 线程个数无限, 可以复用空闲线程(常用)
- Schedulers.computation() CPU密集计算线程, 线程池线程数和CPU数一致.处理图形运算
- AndroidSchedulers.mainThread() Android更新界面的UI主线程(常用)
- subscribeOn 可执行多次, 切换操作符的线程
- observeOn 只需要执行一次, 指定订阅者执行的线程
添加java8的lambda支持
参见:GitHub - evant/gradle-retrolambda: A gradle plugin for getting java lambda support in java 6, 7 and android
build.gradle引入依赖
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
RxJava 使用流程
1. 创建 Observable 被观察者
2. 初始化被观察(订阅)后的事件序列
3. 创建 Observer/Subscriber 观察者/订阅者
4. 订阅 Subscribe
RxJava在Android中的典型使用场景
Scheduler线程切换
定时任务 timer
周期任务 interval
合并多个请求 merge
防止连续点击 throttleFirst
解决回调嵌套Callback hell, flatMap