-
RxJava 是什么, 能解决什么问题
-
对比其他技术理解为什么要选择RxJava
-
RxJava的相关API
-
RxJava在Android中的典型使用场景
-
RxJava在Android中与其他框架的融合
-
github官方介绍:
a library for composing asynchronous and event-based programs by using observable sequences. 一个在运行在Java VM上的库, 通过可观测的序列来组成异步的、基于事件的程序。
-
解决问题:
让复杂的程序逻辑回归简单、清晰
-
RxJava 的四个基本概念:
-
-
Observable (可观察者/被观察者)
-
Observer (观察者/订阅者)
-
subscribe (订阅)
-
Event (事件)
-
-
build.gradle引入依赖
compile 'io.reactivex:rxandroid:1.2.0' compile 'io.reactivex:rxjava:1.1.4'
-
源码地址
https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid
-
Observable(被观察者) 和Subscriber(订阅者) 可以做任何事情
-
-
Observable可以是一个网络请求,Subscriber来显示请求结果;
-
Observable可以是一个数据库查询,Subscriber来显示查询结果;
-
Observable可以是按钮点击事件,Subscriber来响应点击事件;
-
Observable可以是大图片文件的加载解析, Subscriber来展示解析后的图片。
-
-
Observable 可观察者/被观察者
-
Observer/Subscriber (观察者/订阅者)
-
操作符(Operators)(常用的)
- filter 过滤 -
-
distinct 去重复(独特的)
-
take 从开始取出固定个数
-
doOnNext 输出元素之前的额外操作
-
toList 打包对象为集合
-
map 转换对象
-
flatMap 平铺对象
-
-
Scheduler 调度器, 用于线程控制
-
-
Schedulers.immediate() 默认线程
-
Schedulers.newThread() 每次都创建新的线程执行
-
Schedulers.io() 包含线程池的机制, 线程个数无限, 可以复用空闲线程
-
Schedulers.computation() CPU密集计算线程, 线程池线程数和CPU数一致.处理图形运算
-
AndroidSchedulers.mainThread() Android更新界面的UI主线程
-
-
subscribeOn 可执行多次, 切换操作符的线程
-
observeOn 只需要执行一次, 指定订阅者执行的线程
参见: https://github.com/evant/gradle-retrolambda
RxJava 使用流程-
创建 Observable 被观察者
-
初始化被观察(订阅)后的事件序列
-
创建 Observer/Subscriber 观察者/订阅者
-
订阅 Subscribe
-
Scheduler线程切换
-
定时任务 timer
-
周期任务 interval
-
合并多个请求 merge
-
防止连续点击 throttleFirst
-
解决回调嵌套Callback hell, flatMap
-
其他…
-
RxBinding: https://github.com/JakeWharton/RxBinding
//添加依赖 compile 'com.jakewharton.rxbinding:rxbinding:0.4.0' // 相关代码 Button button = (Button)findViewById(R.id.bt); RxView.clickEvents(button) // 设置点击事件 .subscribe(new Action1() { @Override public void call(ViewClickEvent event) { // Click handling } });
-
Retrofit: https://github.com/square/retrofit
// 添加依赖 compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' // 相关代码 new Retrofit.Builder() .baseUrl("http://192.168.1.112:8080/") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build() .create(RxDemoApi.class);
如果你觉得好,可以分享此公众号给你更多的人,原创不易。
------------华丽分割线--------------
长按二维码,关注公众号