RxJava 在Android中的应用(一)
RxJava 在Android中的应用RxJava 是什么, 能解决什么问题对比其他技术理解为什么要选择RxJavaRxJava的相关APIRxJava在Android中的典型使用场景RxJava在Android中与其他框架的融合RxJava 是什么, 能解决什么问题github官方介绍:a library for composing asynchronous and event
·
RxJava 在Android中的应用
- RxJava 是什么, 能解决什么问题
- 对比其他技术理解为什么要选择RxJava
- RxJava的相关API
- RxJava在Android中的典型使用场景
- RxJava在Android中与其他框架的融合
RxJava 是什么, 能解决什么问题
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
对比其他技术理解为什么要选择RxJava
Observable(被观察者) 和Subscriber(订阅者) 可以做任何事情
- Observable可以是一个网络请求,Subscriber来显示请求结果;
- Observable可以是一个数据库查询,Subscriber来显示查询结果;
- Observable可以是按钮点击事件,Subscriber来响应点击事件;
- Observable可以是大图片文件的加载解析, Subscriber来展示解析后的图片。
RxJava的相关API
Observable 可观察者/被观察者
Observer/Subscriber (观察者/订阅者)
操作符(Operators)(常用的)
- map 转换对象
- flatMap 平铺对象
- filter 过滤
- distinct 去重复(独特的)
- take 从开始取出固定个数
- doOnNext 输出元素之前的额外操作
- toList 打包对象为集合
Scheduler 调度器, 用于线程控制
- Schedulers.immediate() 默认线程
- Schedulers.newThread() 每次都创建新的线程执行
- Schedulers.io() 包含线程池的机制, 线程个数无限, 可以复用空闲线程
- Schedulers.computation() CPU密集计算线程, 线程池线程数和CPU数一致.处理图形运算
- AndroidSchedulers.mainThread() Android更新界面的UI主线程
subscribeOn 可执行多次, 切换操作符的线程
- observeOn 只需要执行一次, 指定订阅者执行的线程
添加java8的lambda支持
参见: https://github.com/evant/gradle-retrolambda
RxJava 使用流程
- 创建 Observable 被观察者
- 初始化被观察(订阅)后的事件序列
- 创建 Observer/Subscriber 观察者/订阅者
- 订阅 Subscribe
RxJava在Android中的典型使用场景
- Scheduler线程切换
- 定时任务 timer
- 周期任务 interval
- 合并多个请求 merge
- 防止连续点击 throttleFirst
- 解决回调嵌套Callback hell, flatMap
- 其他…
RxJava在Android中与其他框架的融合 (了解)
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<ViewClickEvent>() { @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.113:8080/") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build() .create(RxDemoApi.class);
更多推荐
已为社区贡献3条内容
所有评论(0)