首先要想在android中使用RXjava2,先添加Gradle配置:
implementation 'io.reactivex.rxjava2:rxjava:2.1.16'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
先来一个简单的Hello Word,看看是一个怎样的情况。不多说,直接上代码:
Observable.create(new ObservableOnSubscribe() {//被观察者
@Override
public void subscribe(ObservableEmitter emitter) {
for (int i = 0; i < 4; i++) {
Log.e(TAG, "subscribe: "+ "Hello word____"+i);
emitter.onNext("Hello word____"+i);
}
emitter.onComplete();
}
}).subscribe(new Observer() {//观察者
@Override
public void onSubscribe(Disposable d) {
disposable=d;
Log.e(TAG, "onSubscribe: "+d.isDisposed());
}
@Override
public void onNext(String s) {
Log.e(TAG, "onNext: disposable "+s+" "+disposable.isDisposed());
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: "+e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: ");
}
});
运行后的结果:
07-18 14:41:17.694 3373-3373/myutil.xhh.com.myrxjavatwo E/MainActivity: onSubscribe: false
subscribe: Hello word____0
onNext: disposable Hello word____0 false
subscribe: Hello word____1
onNext: disposable Hello word____1 false
07-18 14:41:17.695 3373-3373/myutil.xhh.com.myrxjavatwo E/MainActivity: subscribe: Hello word____2
onNext: disposable Hello word____2 false
subscribe: Hello word____3
onNext: disposable Hello word____3 false
onComplete:
从运行的结果上来看先onSubscribe()再subscribe()再到onNext()最后到onComplete();而onSubscribe()与onComplete()是一次性的
方法,subscribe()与onNext()在循环中多次被执行到。先来看一下onSubcribe()这个方法有什么用。可以在这个方法中看到有一个参数Disposable,那么这个参数的作用又是什么呢?通过查看源码看到这个参数实际是一个接口。代表的是一个可以支配的资源。源码如下:
当Disposable的isDisposed()是false的时候,Observer才能正常的接收数据,反之不能接收数据。而执行dispose()将isDisposed()的值改为true;onComplete()为完成的方法。onError() 这个方法不用多说都知道是错误的方法。onComplete()与onError()是互斥的,两者之间只会执行其中一个。当程序出错了,就不会完成,当程序完成了,就不会出错。
Observable与Observer两者通过subscribe()来相关连。而subscribe() 有多个重载方法,下面的是 subscribe()的不同的参数
源码就不弄上来了。其中的作用跟上面的是一样的。
Rxjava2.x 的源码地址:https://github.com/ReactiveX/RxJava
谢谢大家了,观看了。