最近经常看到RxJava这个字眼,也看到很多人在博客中推荐使用RxJava。好奇的我怎么能错过,于是Google了一下,说RxJava好用的和说RxJava难用的都有,于是自己也亲自尝试了一下(感觉不容易上手)。写博客记录下学习的过程,一方面作为巩固,另一方面希望能帮助到初学者。
(第一篇只介绍了RxJava的基本用法,暂时还无法看出RxJava的优势。切莫着急,随着慢慢深入就能体会到RxJava带来的方便了)
参考:给 Android 开发者的 RxJava 详解 (本文部分内容引用自该博客)
在GitHub主页上的介绍:
a library for composing asynchronous and event-based programs using observable sequences for the Java VM
翻译过来就是:
一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库
对于新手们来说这个太抽象了,我们(我也是新手)需要看到看到一个更加具体的解释,简单来说,它就是一个实现异步操作的库。(还是不懂?看代码更实在)
RxJava的好处就在于它的简洁性,逻辑简单的时候看不出RxJava的优势,想必大家都知道在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。这时候RxJava的优势就来了,随着程序逻辑变得越来越复杂,它依然能够保持简洁。
首先要先介绍一下观察者模式(可能比喻的不够恰当,意思到了就好);
这里举一个我个常用的例子,点击Button后触发OnClickListener
中的onClick()事件。在这个事件中他们的角色分别如下:
在上面介绍了观察者模式,这里也将RxJava中的三个角色进行一下角色分配
直接看代码吧,这里只展示了RxJava的基本用法,暂时看不出RxJava的优势。
例:打印机个字符串
添加依赖
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
//创建一个观察者
Observer<String> observer = new Observer<String>() {
@Override
public void onCompleted() {
Log.i(TAG, "Completed");
}
@Override
public void onError(Throwable e) {
Log.i(TAG, "Error");
}
@Override
public void onNext(String s) {
Log.i(TAG, s);
}
};
//使用Observable.create()创建被观察者
Observable observable1 = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("Wrold");
subscriber.onCompleted();
}
});
//订阅
observable1.subscribe(observer);
以上用到的都是rx包里面的,别用错了!!!
Observer
上面完成了一次Rxjava的基本使用。
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!");
}
};
不仅基本使用方式一样,实质上,在 RxJava 的 subscribe 过程中,Observer也总是会先被转换成一个Subscriber再使用。如图:
Rxjava源码
所以如果你只想使用基本功能,选择Observer和Subscriber是完全一样的。它们的区别对于使用者来说主要有两点:
Observable observable2 = Observable.just("Hello", "World");
2、使用Observable.from()创建被观察者
String [] words = {"Hello", "World"};
Observable observable3 = Observable.from(words);
或
List<String> list = new ArrayList<String>();
list.add("Hellow");
list.add("Wrold");
Observable observable4 = Observable.from(list);
目前没看出RxJava的任何好处,感觉代码还多了~~~
(别急,因为是第一篇,我只介绍了他们之间的关系以及最基础的用法。后面的几篇我会介绍RxJava的其他功能,还有一些复杂的嵌套关系的处理,到时候知道RxJava的强大之处了)
更多:
Android RxJava的使用(三)转换(map、flatMap)
Android RxJava的使用(四)线程控制 —— Scheduler
以上有错误之处感谢指出