前言
RxJava2的正式版已经出来了,目前关于RxJava2的文章比较少,而且大部分都是和RxJava1做比较的,看起来感觉很零碎,而且对于一个还没读懂RxJava而只会用的我来说,看起来感觉比较吃力。刚刚整理的RxJava2中Flowable的用法,个人理解难免有错,有问题还请指正,避免误导大家。
使用流程
下面是关于RxJava的一个简单的使用流程。
在RxJava2中,数据源有两个类,一个Observable,一个是Flowable,区别在于Flowable能处理背压,而Obserable没有处理背压的能力。观察者也有两个,一个是Observer,适用于Observable。一个是Subscriber,适用于Flowable。(上个版本里Subscriber是实现了Observer接口的一个抽象类,这里是两个不相关的接口)
上代码,Flowable的使用
生成数据源和观察者
Flowable<Integer> flowable = Flowable.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(FlowableEmitter<Integer> e) throws Exception {
for(int i=0;i<10000;i++){
e.onNext(i);
}
e.onComplete();
}
}, BackpressureStrategy.DROP); //指定背压处理策略
ResourceSubscriber resultSubscriber = new ResourceSubscriber<Integer>() {
@Override
public void onNext(Integer integer) {
Log.d("ResourceSubscriber", integer.toString());
IMainActivityView view = getView();
if(view!=null){
view.updateUI();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable t) {
this.dispose();
Log.d("ResourceSubscriber",t.toString());
}
@Override
public void onComplete() {
this.dispose();
Log.d("ResourceSubscriber","onComplete");
}
};
addSubscription(ApiManager.INSTANCE.startObservable(flowable,resultSubscriber));//订阅并把返回值添加到CompositeDisposable
订阅
public ResourceSubscriber startObservable(Flowable observable, ResourceSubscriber subscriber) {
return (ResourceSubscriber)observable.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnLifecycle(new Consumer<Subscription>() {
@Override
public void accept(Subscription subscription) throws Exception {
LogUtils.d("doOnLifecycle","OnSubscribe");
}
}, new LongConsumer() {
@Override
public void accept(long t) throws Exception {
LogUtils.d("doOnLifecycle","OnRequest");
}
}, new Action() {
@Override
public void run() throws Exception {
LogUtils.d("doOnLifecycle","OnCancel");
}
})
.subscribeWith(subscriber);
}
用于取消订阅
private CompositeDisposable mDisposables;
//加入到订阅列表
protected void addSubscription(Disposable disposable) {
if (disposable == null) return;
if (mDisposables == null) {
mDisposables = new CompositeDisposable();
}
mDisposables.add(disposable);
}
public void dispose(Disposable disposable){
if(mDisposables!=null){
mDisposables.delete(disposable);
}
}
//取消所有的订阅
public void dispose(){
if(mDisposables!=null){
mDisposables.clear();
}
}
源码链接
这里只是简单写了Flowable最简单的用法,关于RxJava内容还有很多,推荐大家可以看看我所理解的RxJava和给 Android 开发者的 RxJava 详解以及RxJava2 vs RxJava1。