降低方法数的时候发现RXJAVA升到2了,之前公司封的框架太烂了,趁此机会弄一个新的,以下是踩坑:
rxjava三部曲:
1.新建observable
Observable.create(newObservableOnSubscribe() {
@Override
public voidsubscribe(@NonNull ObservableEmitter e)throwsException{
e.onNext();
e.onError(exception);
}
})
rxjava2通过ObservableEmitter发射事件,各类操作符与rxjava1的区别不大,
使用retrofit2的话就不用关心新建observable了,因为它返回的就是一个observable,
注意导入:compile'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
2.新建observer
rxjava2新增了一些Disposable的类,observer推荐使用DisposableObserver
3.建立订阅关系subscribe
还是subscribe,区别是subscribe返回值变为void,如果要返回observer,可以用subscribeWith
订阅之后要取消订阅来释放资源,这里就要讲一下重点的CompositeDisposable,
rxjava1中用的是CompositeSubscription的add和clear方法,
rxjava2中CompositeDisposable的add参数是Disposable,这就是我推荐使用DisposableObserver的原因
compositeDisposable.add(disposableObserver);
observable.subscribeOn(Schedulers.io()).
observeOn(AndroidSchedulers.mainThread()).subscribe(disposableObserver);
disposableObserver直接new出来然后实现几个方法即可,就不贴大段的代码了;
取消订阅:compositeDisposable.clear
本来我想设置一个final的observer,然后让多个observable订阅到它,出现个异常
io.reactivex.exceptions.ProtocolViolationException:
查了一下说是一个observer只能subscribe订阅一次,必须每次都要new个新的。
Action在rxjava中用Consumer替代
关于back pressure,主要应用场景是observer发送和observable处理速度不一致,目前没有实际场景用到,就不讨论了。