一、什么是Rxjava?
RxJava is a Java VM implementation of ReactiveX (Reactive Extensions): a library for composing asynchronous and event-based programs by using observable sequences
一个在JVM上使用可观察的事务来组成的异步的、基于事件的程序的库
二、 Rxjava支持哪些语言?
支持java6及以上版本,还有一些基于JVM的语言比如: Groovy,Clojure,JRuby,Kotlin和Scala。
三、Andorid开发者使用:
添加依赖:
compile 'io.reactivex.rxjava2:rxjava:2.2.0'
四、开始使用Rxjava:
4.1、创建被观察者对象:
4.1.1、 从已有数据结构中创建被观察者对象:
Observable<String> o=Observable.fromArray("a","b","c");
Observable<String> o2=Observable.just("one object");
使用成型例子Example1:
private void hello(String... names)
{
Observable.fromArray(names).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.i("onNext","Hello" + s + "!");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
hello("Ben", "George");
运行结果:
4.1.2、使用create创建Observable被观察者对象
//创建被观察者对象
Observable<String> stringObservable=Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
Log.i(tag,"发送线程:"+Thread.currentThread().getName());
Log.i(tag,"发送:"+"hello");
emitter.onNext("hello");
Log.i(tag,"发送:"+"world");
emitter.onNext("world");
emitter.onComplete();
}
});
stringObservable.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.i(tag,"接收线程:"+Thread.currentThread().getName());
Log.i(tag,"接收:"+s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Log.i(tag,"onComplete");
}
});
其中ObservableEmitter是事件的发送器,可以发送多个onNext()方法,一旦发送onComplete(),onError()事件后,后续的事件将不会发送
4.1.3、使用just依次遍历just里面的项:
Observable.just(3,2,1).subscribe(i->{
Log.i(tag,"收到整型数据:"+i);
});
运行结果:
4.2、将Observable被观察者数据转化为你更需要的数据类型,然后去订阅: 使用map函数方法:
Observable.just(3,2,1).map(new Function<Integer,Integer>() {
@Override
public Integer apply(Integer integer) throws Exception {
if(integer==1)
{
return integer;
}
return 0;
}
}).subscribe(i->{
Log.i(tag,"收到整型数据:"+i);
});
运行结果:
4.3、改变发送事件变化的线程和接收事件变化的操作处理线程(默认情况下在哪个线程使用发送事件和接收事件的线程中处理)
在被观察对象中使用ObserveOn和SubscribeOn两个方法可实现线程指定:
ObservabeOn:
specify the Scheduler on which an observer will observe this Observable
指定一个观察者在哪个调度器上观察这个Observable
SubscribeOn:
specify the Scheduler on which an Observable will operate
指定Observable自身在哪个调度器上执行
图解:
从上面的图例中可以看出,SubscribeOn这个操作符指定的是Observable自身在哪个调度器上执行,而且跟调用的位置没有关系。而ObservableOn则是指定一个观察者在哪个调度器上观察这个Observable,当每次调用了ObservableOn这个操作符时,之后都会在选择的调度器上进行观察,直到再次调用ObservableOn切换了调度器。
附: 翻墙博客介绍地址,分为part1 part2 part3:
https://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/
附: WiKi学习网址: