最最基础的android使用RxJava介绍

        很久很久以前,就看了各种介绍RxJava的文章,网上最出名的也看过了,但还是处于一知半解状态,最近再看,决定实践Talk is cheap,show me code。以代码说话,这样也会更容易理解。

        首先还是介绍一下主角RxJava吧,百度百科的说法:RxJava是用于使用Java VM的可观察序列编写异步和基于事件的程序的库。别问我这句话怎么理解,或是什么意思,我也说不清楚。套用网上著名文章(给Android 开发者的 RxJava 详解)里的说法:RxJava的本质可以压缩为异步这一个词,说到根上,它就是一个实现异步操作的库。

        RxJava核心思想就是观察者模式,对于观察者模式,也是研究了好几次,先给出解释:

观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)
是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,
并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。
此种模式通常被用来实现事件处理系统。

根据特定场景来理解这些名词是最通俗的办法 ,观察者模式涉及两种身份,观察者和被观察者,你可以想象,你自己(码神、码农、码畜、程序猿、程序媛)就是观察者,产品需求说明书是被观察者。你是需要根据开发需求说明书来干活的,这关系到身家性命,所以你要观察它。但是 ,说明书是产品部门给出的,你不能知道他们什么时候会出来。放心,产品部门有新的功能会迫不及待告诉你的。这时候,被观察者有更新,就会发送通知给观察者。大概就是这么个意思。

        代码解释一切:

开始开发前,工具还是要齐全的:添加依赖

compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

第一步:创建被观察者

Observable productDoc = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                e.onNext("需求文档版本1.0");
                e.onNext("需求文档版本2.0");
                e.onNext("需求文档版本3.0");
                e.onComplete();
            }
        });

第二步:创建观察者

Observer<String> programmer = new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.e(TAG,"onSubscribe");
            }

            @Override
            public void onNext(String value) {
                Log.e(TAG,"onNext:"+value);
            }

            @Override
            public void onError(Throwable e) {
                Log.e(TAG,"onError="+e.getMessage());
            }

            @Override
            public void onComplete() {
                Log.e(TAG,"onComplete()");
            }
        };

第三步:建立订阅关系

productDoc.subscribe(programmer);

至于第三步为什么是产品需求文档订阅了程序员,这个似乎是RxJava内部实现被迫如此,有了解的读者可以评论,我也涨涨见识。

运行结果如下:

至此,这个超级简单的RxJava调用完成了。

注:文章肯定有很多写的不好的地方,可能在理解上还会出现错误或偏差,只是想将这种思想记录下来,供大家理解,欢迎评论!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章