随着技术跟实现方式的突飞猛进,做为程序猿的咱们,要么选择紧跟时代潮流,要么选择?带,可是我不会这么轻易的?带,毕竟我这么帅!哈哈,今天给你们带来的是关于RxJava
的文章,不是心灵鸡汤,不过味道不错!《给 Android 开发者的 RxJava 详解》这是大神的原文,我将其分解并加入一些本身的理解,帮助你们更好的理解使用java
首先在Android Studio
中加入RxJava
支持方式:
在build.gradle
中加入微信
而后记得
这样所需的jar
就有了。异步
何为RxJava
:(一个在 Java VM
上使用可观测的序列来组成异步的、基于事件的程序的库)。ide
RxJava
的优点:简洁(一条链式调用,结构比较清晰)post
RxJava
使用的是一种扩展的观察者模式:RxJava
有四个基本概念:Observable
(可观察者,即被观察者)、 Observer
(观察者)、 subscribe
(订阅)、事件
。Observable
和Observer
经过 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()
取消订阅两个方法)Subscriber
对 Observer
接口进行了一些扩展,但他们的基本使用方式是彻底同样的:
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
(订阅)
建立了 Observable
和 Observer
以后,再用 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); }
这样就能够获得以下打印信息:
自此总体的流程算是走通了(若是想知道为何能够这么走通,请自行查看源码中的规则,这里只讲述用法。)
这篇文章是对《给 Android 开发者的 RxJava 详解》的导读,吃饭要一口一口的吃,这样理解起来也更顺畅一些,不过关键的仍是要本身去亲自code验证,别人说的再好,也只有本身尝试用了才会发现好处,否则只是别人的,不会是本身的。该文章较长,因此分为多篇,我将跟你们一块儿学习,并帮助你们理解。最后奉上个人我的技术订阅号,锵哥的觉悟,微信号:DY_suixincq
个人博客最新文章会在这里同步推出,欢迎关注交流