RxJava2初步使用

前言

RxJava2的正式版已经出来了,目前关于RxJava2的文章比较少,而且大部分都是和RxJava1做比较的,看起来感觉很零碎,而且对于一个还没读懂RxJava而只会用的我来说,看起来感觉比较吃力。刚刚整理的RxJava2中Flowable的用法,个人理解难免有错,有问题还请指正,避免误导大家。

使用流程

下面是关于RxJava的一个简单的使用流程。
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值