1.线程切换
subscribeOn()
observeOn()
subscribeOn()和observeOn()的区别:
- subscribeOn()主要改变的是订阅的线程,即call()执行的线程;
- observeOn()主要改变的是发送的线程,即onNext()执行的线程。
Scheduler进程调度
Schedulers.immediate():默认的,当前线程
Schedulers.newThread():新建的线程
Schedulers.io():采用了线程池,内部是一个不限制线程数量的线程池,用于io操作
Schedulers.comutation():线程池,线程池中的线程数量取决于CPU的核数,通常用于CPU密集操作,如:数据读写操作、解析,图形处理
2.flatmap 接口依赖
返回Observable,处理嵌套请求
我有时候用来做连续请求,比如首页多类型的请求
3.merge 接口合并
Observable<T> a=xxx; |
接口结果类型相同的时候可以直接Observable
接口结果类型不同的时候可以用?代替T
只有当这两个请求都完成后才能更新UI
4.concat 构建多级缓存
Observable.concat(getFromMemory(),getFromDisk(),getFromNet()) |
不要忘记用takeFirst(),concat按顺序将它们串联。
5.timer 定时器
Observable.timer(2,TimeUnit.SECONDS).subscribe(); |
6.interval 周期任务
Observable.interval(5,TimeUnit.SECONDS).subscribe(); |
7.filter 数据过滤
Observable.from(list).filter(new Func1<String,Boolean>){ |
8.throttleFirst 界面防抖动
防止多次点击,重复打开界面,类似于自己写的NoDoubleClickListener
RxView.clicks(btn).throttleFirst(1L,TimeUnit.SECONDS).subscribe(); |
9.just 老接口适配
将一些方法返回类型转为Observable
Observable.just(x,y).subscribe(new Action1<Integer>(){ |
10.响应式界面
例如登录的时候,只有用户名和密码都不空的时候,登录按钮才可点击
Observable<String> username=RxTextView.textChanges(usernameEditText); |
11.map
处理数据,可以返回不同数据的Observable
12.connect 广播
同时发送消息进行操作
ConnectObservable<T> broadcastObservable=myFirstObservable. |
要注意的地方
主动取消订阅,防止内存泄漏。一般在BaseActivity或者BaseFragment中统一取消订阅,还可以用RxLifeCycle库来取消订阅,帮我们在组件声明周期的某个阶段自动取消订阅。
提供了bindToLifeCycle()和bindUntilEvent()来绑定生命周期和事件。
bindToLifeCycle:
activity需要继承RxAppCompatActivity
在onResume中绑定的话,会在对应的onPause里边取消绑定
onStart订阅->onStop中取消
onCreate订阅->onDestory取消
bindUntilEvent:
activity需要继承RxAppCompatActivity
在类似onclick事件中绑定,在onPause里边解除绑定