RxJava学习并理解笔记(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oqzuser1q2w3e4r5t/article/details/82454201

作为菜鸟来讲,看了好多的rxjava操作符,弄得我怕怕的,就怕自己坚持不住学习,所以,还是一步步来学习它吧,文章主要是记录一下我学习rxjava的过程。

重点:rxjava的观察者模式

程序中基于用户的操作,数据的改变等因素,UI都会发生相应的变化

rxjava是一种异步变化思想

举个例子来说   

我在A店买了一件商品B   由快递员C送到我的手上

从rxjava的思想上来看   

我 -----观察者

商品----被观察者

那么快递员充当了什么职责呢?快递员从事有序并准备的工作将商品送至我的手上  快递员的举动也就是充当一个中介,

扫描二维码关注公众号,回复: 4477643 查看本文章

就相当于一个(观察者模式)的维护者

具体来讲 商品B(被观察者)至我手上的过程我不必完全弄清楚 ,比如它经过哪里,发生了什么,我要的不过就是它的到达

所以我(观察者)不可能随时盯着它,我只有在需要的进候,我才会想要了解它,而了解的前提就是我已经付款有了了解它的资格,在模式中,被称为 (订阅),而当快递到我手上以后,我就取消关注它的信息,也就是解除订阅。

我想了解商品进展,可以查询或者致电给快递员,如果 快递员手机坏了,商品丢了,会onError;

商品一旦到了我的手上,会onCommplete;

快递员给我送快递的行为 ,onNext(),商品(被观察者)正一点一点的 到达我的手上,到我手上之后的事情,我会自行处理

快递员可是管不着的,所以一个完整的观察者模式完成。

后期的操作,大家都懂得,拆快递,用快递,多开心啊,要干的事可多了,但是这种行为就不是逻辑处理行为啦,是一种展示行为。

我经常使用MVP模式来操作项目,画个图图

 这就是我对于rxjava思想的理解

我知道它有很多操作符,但是思想应该凌驾于行为之上,毕竟在起手一个项目之前,思考才是最重要的

第二点:为啥要用它呢?

如果说异步  AsyncTask和Handler 都能异步,rxjava没出世以前 ,它俩就很流行

如果说链式 ,上面那两个我用了以后,写接口,也可以实现啊

所以说促使大家来学习的也就是后期的维护与管理

observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                       
                    }

                    @Override
                    public void onNext(String value) {
                       
                    }

                    @Override
                    public void onError(Throwable e) {
                       
                    }

                    @Override
                    public void onComplete() {
                      
                    }
                });

程序是不断在变化的,可能需求天天有,天天改,减小改动的范围和操作 是必然的  这就不得不说一下rxjava的一堆操作符了,

突然间觉得这堆操作符不是那么可怕,各有 各的可爱之处

举个小例子,领导分配任务,整个程序,展示一个咱们单位所有员工的精神面貌,没问题

整个RecyclerView  ,展示一下员工的照片和基础信息

领导后期再提要求,大老爷们不要,可以,那我加个   if else

领导再说 岁数大的就算了吧 过40的不要展示了  要更有活力的 咋整 我再加条件判断呗

改来改去 领导觉得人数太多  这么的吧  你就给展示业绩靠前几个人就行啦 ,话说,你啥时候能改完  。。。。。。。。(真 的是生无可恋脸)

领导最后直接说了,我想要个动画效果,隔一段时间展示一下,不难吧!尽量保证没BUG啊         。。。。。。。。。。。(报告领导,我想去屎一下行不行)

疯狂的进行 if else 判断 ,再嵌套,再过几个月 ,看一眼自己的代码,我都把自己看蒙了,不知道自己写的是啥

所以,一个简洁,清晰的代码对于后期维护和二次开发 是多么的重要

做为程序员,从什么时候可以不必要学习了呢,你写完一个程序,过几个月再看的时候,嘴里会不自觉发生赞叹  那么 你可以停止学习了,如果像我一样 看自己代码都会蒙圈的,那么下班后,少玩把游戏,多多精尽技术吧!

向我上面举的例子,使用 filter 和 ofType 等操作符可以让人不蒙圈,这么一想,突然觉得自己爱上它了

filter: 过滤数据。内部通过OnSubscribeFilter过滤数据。

  Observable.just(33,25,50,46)
            .filter(new Func1<Integer, Boolean>() {
                @Override
                public Boolean call(Integer integer) {
                    return integer<40;
                }
            })
    .subscribe(item->Log.d("JG",item.toString())); 

    过滤掉年龄可以这么做  33,25就过滤出来了
ofType: 过滤指定类型的数据

Observable.just(1,1,"98")
            .ofType(Integer.class)
            .subscribe(item -> Log.d("JG",item.toString()));

take: 只发射开始的N项数据或者一定时间内的数据。

  Observable.just(3,4,5,6,9,9,8,7,5,5)
            .take(3)//发射前三个数据项
           
那我想它定时执行咋整,可以这样

Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(999);
                sleep(4000);
                emitter.onNext(999);
            }
        }).observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Consumer<Integer>() {
                    @Override
                    public void accept(Integer integer) throws Exception {
                       
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {

                    }
                }, new Action() {
                    @Override
                    public void run() throws Exception {

                    }
                });

突然觉得自己爱它又多了一点点,动手来写段干净利索的代码吧!

猜你喜欢

转载自blog.csdn.net/oqzuser1q2w3e4r5t/article/details/82454201
今日推荐