1,线程调度
Scheduler 有很多实现类 SingleScheduler .IoScheduler....
Schedulers.computation() 用于计算任务,
Schedulers.from(executor) 指定excecutor作为调度器
Schedulers.immediate( ) 当前线程执行
Schedulers.io() IO密集型任务
Schedulers.newThread() 为每个任务新建线程
Schedulers.trampoline( ) 当其它排队的任务完成后,在当前线程排队开始执行
AndroidSchedulers.mainThread() 用于Android的UI更新操作
2,subscribeOn/observeOn
subcribeOn多次调用为什么只有第一次生效
observeOn多次调用,每次都会起作用
3,防抖 采用rxbinding2
RxView.clicks(mBt)
.throttleFirst(10, TimeUnit.SECONDS)
查询过滤 debounce 防抖 .throttle节流
RxTextView.textChanges(edittext)
.debounce(1, TimeUnit.SECONDS)
//跳过第1次请求 因为初始输入框的空字符状态
.skip(1)
4, combineLatest 操作符
用来将多个Observable发射的数据组装起来然后在发射
比如用来登录校验
Observable.combineLatest(ObservableName, ObservablePassword
, (phone, password) -> isPhoneValid(phone.toString()) && isPasswordValid (password.toString()))
.subscribe(mBtLogin::setEnabled);
interval 操作符可以实现短信发送倒计时效果
Observable.interval(1,TimeUnit.SECONDS,AndroidSchedulers.mainThread())
.take(60)
flatMap 操作符可以实现数据嵌套转换效果。
.flatMap( o -> wanAndroidApi.getProject())
.flatMap(projectBean -> Observable.fromIterable(projectBean.getData()))
concatMap 和flatMap差不多,只是是按顺序发送。
5,自定义Eventbus
定义 post方法,使用 FlowableProcessor onNext发送数据
定义事件
然后注册。rxBus.toFlowable(CrossActivityEvent.class)
.subscribe(new Consumer<CrossActivityEvent>() {
@Override
public void accept(CrossActivityEvent crossActivityEvent) throws Exception {
Log.i(TAG, "我是来自TestCrossActivity的event");
}
});