RXJAVA2踩坑记录

降低方法数的时候发现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处理速度不一致,目前没有实际场景用到,就不讨论了。

你可能感兴趣的:(RXJAVA2踩坑记录)