RxJava的导读(一)

前言:

随着技术跟实现方式的突飞猛进,做为程序猿的咱们,要么选择紧跟时代潮流,要么选择?带,可是我不会这么轻易的?带,毕竟我这么帅!哈哈,今天给你们带来的是关于RxJava的文章,不是心灵鸡汤,不过味道不错!《给 Android 开发者的 RxJava 详解》这是大神的原文,我将其分解并加入一些本身的理解,帮助你们更好的理解使用java

正文:

首先在Android Studio中加入RxJava支持方式:
build.gradle中加入微信

clipboard.png
而后记得
clipboard.png
这样所需的jar就有了。异步

基本概念:

何为RxJava:(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。ide

RxJava的优点:简洁(一条链式调用,结构比较清晰)post

RxJava使用的是一种扩展的观察者模式:
RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件
ObservableObserver 经过 subscribe() 方法实现订阅关系,从而 Observable 能够在须要的时候发出事件来通知Observer学习

与传统观察者模式(相似给button注册OnClickListener的方式)不一样, RxJava 的事件回调方法除了普通事件 onNext() (至关于 onClick() / onEvent())以外,还定义了两个特殊的事件:onCompleted()onError()gradle

onCompleted(): 事件队列完结。 ui

onError(): 事件队列异常。spa

基本实现:

根据上面的概念,咱们能够知道,主要有三个步骤,
1) 建立 Observer(观察者)code

Observer 即观察者,它决定事件触发的时候将有怎样的行为。 RxJava 中的 Observer 接口的实现方式(这里稍微描述一下:被观察者只负责发送通知,要作事情的顺序,跟内容,真正作事情就是观察者的onNext方法,作完以后执行onCompleted方法)

Observer<String> observer = new Observer<String>() {
    @Override
    public void onNext(String s) {
        Log.d(tag, "Item: " + s);
    }

    @Override
    public void onCompleted() {
        Log.d(tag, "Completed!");
    }

    @Override
    public void onError(Throwable e) {
        Log.d(tag, "Error!");
    }
};

RxJava 还内置了一个实现了 Observer 的抽象类:Subscriber。 (一开始看,跟订阅的动做subscribe()很像,感受名字有点眼花,问了土豪以后,原来英文解释就好接受多了:
Observer 观察者 Subscriber订阅者 订阅者有些特殊的要求,因此对前者扩展后,使用更方便,主要体如今onStart()事件发送前执行,和unsubscribe()取消订阅两个方法)
SubscriberObserver 接口进行了一些扩展,但他们的基本使用方式是彻底同样的:

Subscriber<String> subscriber = new Subscriber<String>() {
    @Override
    public void onNext(String s) {
        Log.d(tag, "Item: " + s);
    }

    @Override
    public void onCompleted() {
        Log.d(tag, "Completed!");
    }

    @Override
    public void onError(Throwable e) {
        Log.d(tag, "Error!");
    }
};

2) 建立 Observable(被观察者)
Observable 即被观察者,它决定何时触发事件以及触发怎样的事件。 RxJava 使用 create() 方法来建立一个 Observable ,并为它定义事件触发规则:

Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        subscriber.onNext("Hello");
        subscriber.onNext("Hi");
        subscriber.onNext("Aloha");
        subscriber.onCompleted();
    }
});

这个被观察者上面的代码,其实能够理解为一个任务计划,当开始被订阅(Subscribe)的时候,这里能够理解订阅就是开始执行任务清单,而后观察者就一个个的把任务完成的逻辑。这个任务计划,也有简化写法以下:(just(T...)from(T[]) )

//    被观察者
//    Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
//        @Override
//        public void call(Subscriber<? super String> subscriber) {
//            subscriber.onNext("Hello");
//            subscriber.onNext("Hi");
//            subscriber.onNext("Aloha");
//            subscriber.onCompleted();
//        }
//    });

//    //等效以上写法
//    Observable observable = Observable.just("Hello", "Hi", "Aloha");

    //等效以上写法
    String[] words = {"Hello", "Hi", "Aloha"};
    Observable observable = Observable.from(words);

3) Subscribe (订阅)
建立了 ObservableObserver 以后,再用 subscribe() 方法将它们联结起来,整条链子就能够工做了。(能够理解为被观察者的任务计划表开始派给观察者,并执行任务)
以下代码:(组合写法一就是相似内部匿名类的写法,一开始看不容易看,你了解了分离写法的结构的时候,就比较好看了)

/**
     * 练习Rxjava
     */
    private void practiceRxjava() {
//        1.组合写法:
//        Observable.create(new Observable.OnSubscribe<String>() {
//            @Override
//            public void call(Subscriber<? super String> subscriber) {
//                subscriber.onNext("hello");
//            }
//        }).subscribe(new Subscriber<String>() {
//            @Override
//            public void onCompleted() {
//
//            }
//
//            @Override
//            public void onError(Throwable e) {
//
//            }
//
//            @Override
//            public void onNext(String s) {
//                Log.d("rx", s);
//            }
//        });

//        2.分离写法:
        observable.subscribe(observer);
    }

这样就能够获得以下打印信息:

clipboard.png
自此总体的流程算是走通了(若是想知道为何能够这么走通,请自行查看源码中的规则,这里只讲述用法。)

总结:

这篇文章是对《给 Android 开发者的 RxJava 详解》的导读,吃饭要一口一口的吃,这样理解起来也更顺畅一些,不过关键的仍是要本身去亲自code验证,别人说的再好,也只有本身尝试用了才会发现好处,否则只是别人的,不会是本身的。该文章较长,因此分为多篇,我将跟你们一块儿学习,并帮助你们理解。最后奉上个人我的技术订阅号,锵哥的觉悟,微信号:DY_suixincq个人博客最新文章会在这里同步推出,欢迎关注交流

相关文章
相关标签/搜索