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

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[2\]:上面我们介绍了了关于RxJava的基本的概念和使用方式,在下面的文章中我们会按照以上定义的顺序从API的角度来讲解以下RxJava各个模块的使用方法。引用\[3\]:retry使用了一种错误重试机制,它可以在出现错误的时候进行重试,我们可以通过参数指定重试机制的条件。以下面的程序为例,这里我们设置了当出现错误的时候会进行2次重试,因此,第一次的时候出现错误会调用onNext,重试2次又会调用2次onNext,第二次重试的时候因为重试又出现了错误,因此此时会触发onError方法。也就是说,下面这段代码会触发onNext3次,触发onError()1次。 问题: rxjava2 defer是什么意思? 回答: 在RxJava2中,defer是一个非常有用的操作符。它允许我们在每次订阅时创建一个新的Observable,以便能够动态地生成Observable。defer操作符接受一个Observable的工厂函数作为参数,当有观察者订阅时,它会调用这个工厂函数创建一个新的Observable。这样,每次订阅时都会得到一个全新的Observable实例,可以确保每个订阅者都能够获取到最新的数据。defer操作符的使用场景包括延迟创建Observable、动态地生成Observable等。 #### 引用[.reference_title] - *1* *2* *3* [RxJava 系列-1:一篇的比较全面的 RxJava2 方法总结](https://blog.csdn.net/weixin_34411563/article/details/87985915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值