前言:
随着技术跟实现方式的日新月异,作为程序猿的我们,要么选择紧跟时代潮流,要么选择?带,但是我不会这么轻易的?带,毕竟我这么帅!哈哈,今天给大家带来的是关于RxJava
的文章,不是心灵鸡汤,不过味道不错!《给 Android 开发者的 RxJava 详解》这是大神的原文,我将其分解并加入一些自己的理解,帮助大家更好的理解使用
正文:
首先在Android Studio
中加入RxJava
支持方式:
在build.gradle
中加入
然后记得
这样所需的jar
就有了。
基本概念:
何为RxJava
:(一个在 Java VM
上使用可观测的序列来组成异步的、基于事件的程序的库)。
RxJava
的优势:简洁(一条链式调用,结构比较清晰)
RxJava
使用的是一种扩展的观察者模式:RxJava
有四个基本概念:Observable
(可观察者,即被观察者)、 Observer
(观察者)、 subscribe
(订阅)、事件
。Observable
和Observer
通过 subscribe()
方法实现订阅关系,从而 Observable
可以在需要的时候发出事件来通知Observer
。
与传统观察者模式(类似给button
注册OnClickListener
的方式)不同, RxJava
的事件回调方法除了普通事件 onNext()
(相当于 onClick()
/ onEvent()
)之外,还定义了两个特殊的事件:onCompleted()
和 onError()
。
onCompleted()
: 事件队列完结。
onError()
: 事件队列异常。
基本实现:
根据上面的概念,我们可以知道,主要有三个步骤,
1) 创建 Observer
(观察者)
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
我的博客最新文章会在这里同步推出,欢迎关注交流
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。