前言:Rxjava用官方的描述就是一个用于使用Java VM的可观察序列编写异步和基于事件的程序的库。
核心在于异步。异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的 AsyncTask 和Handler ,其实都是为了让异步代码更加简洁。RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。这里的简洁并不是说代码量变少,而是基于流式操作的可读性让代码看起来更加容易被读懂。
基本概念
RxJava 是一个采用观察者设计模式的响应式编程框架。所以自然少不了 Observable 和 Observer了。
- Observable:被观察者,通常是用来发出事件。
- Observer:观察者,通常是用来处理被观察者发出的事件。
- Subject:Subject是一个比较特殊的对象,既可充当发射源,也可充当接收源 。
- Subscriber:订阅者,也是接收源,Subscriber实现了Observer接口,比Observer多了一个最重要的方法unsubscribe( ),用来取消订阅,当你不再想接收数据了,可以调用unsubscribe( )方法停止接收,Observer 在 subscribe() 过程中,最终也会被转换成 Subscriber 对象;
- Subscription:Observable调用subscribe( )方法返回的对象,它可以调用unsubscribe( )方法,可以用来取消订阅事件。
一个Observable可以发出0个或者多个事件,直到结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onComplete()或者Subscriber.onError()结束。
示例
Observable.just("你好")
.map(new Function<String, String>() {
@Override
public String apply(String s) throws Exception {
return s+"啊!";
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d("结果:",s);
}
});
这短代码的意思是,被观察者将 “你好”字符 串,拼接上“啊!”之后,发送给观察者。同时,指定了转换的操作在子线程进行,接收的操作的处理在主线程中。而上面这个代码如果用lambda表达式,则显得更简洁:
Observable.just("你好")
.map(s -> s+"啊!")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(s -> Log.d("结果:",s));
Observer的创建
Observer observer = new Observer<String>() {
@Override
public void onCompleted() {
Log.e("tag", "onCompleted: ");
}
@Override
public void onError(Throwable e) {
Log.e("tag", "onError: " + e.toString());
}
@Override
public void onNext(String o) {
Log.e("tag", "onNext: " + o.toString());
}
};
observer 作为接收者,正常情况下会依次调用onNext方法,直到最终结束调用onComplete方法。如果遇到错误或者异常,会调用onError方法。
以上是对RxJava2的基本使用和了解,下一篇会依次介绍RxJava2的操作符。