感谢抛物线作者的rxjava讲解 本文章将所讲解的内容进行了代码化更容易加深实战理解
原文出处:https://gank.io/post/560e15be2dca930e00da1083
本文中如有不对的地方欢迎大家提出
/* 创建被观察者方法一 */ public void createObservableOne() { Observable observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("第一个rxjava"); subscriber.onNext("第二个rxjava"); subscriber.onNext("第三个rxjava"); subscriber.onCompleted(); //创建了个onSubservable放在被观察者中当被订阅的时候自动的出发里面的call方法执行里面的三个onNext方法和一个onCompleted方法 } }); } /* 创建被观察者方法二 */ public void createObservableTwo() { Observable observable = Observable.just("第一个rxjava", "第二个rxjava", "第三个rxjava"); //或者 /* String[] words = {"第一个rxjava", "第二个rxjava", "第三个rxjava"}; Observable observable = Observable.from(words); 将会依次调用: onNext("第一个rxjava"); onNext("第二个rxjava"); onNext("第三个rxjava"); onCompleted();*/ } /* 创建观察者方法一 */ public void createObserverOne() { rx.Observer<String> observer = new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Toast.makeText(FirstActivity.this, s, Toast.LENGTH_SHORT).show(); } }; } /* 创建观察者方法二 Subscriber是实现了Observer的抽象类 对observer进行了扩展 */ public void createObserverTwo() { Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Toast.makeText(FirstActivity.this, s, Toast.LENGTH_SHORT).show(); } }; } /* 进行观察者与被观察者之间的订阅 */ public void subscribe() { Observable observable = null; rx.Observer observer = null; observable.subscribe(observer); } /* 使用subscribe订阅底层的源码 */ public void init(Subscriber subscriber) { /* public Subscription subscribe(Subscriber subscriber) { subscriber.onStart(); onSubscribe.call(subscriber); return subscriber; } 调用 Subscriber.onStart() 调用观察者的onstart方法 这个方法可以进行一些事前的初始化 调用 Observable中的OnSubscribe.call(Subscriber)在这里,事件发送的逻辑开始运行。从这也可以看出,在 RxJava 中, Observable 并不是在创建的时候就立即开始发送事件,而是在它被订阅的时候,即当 subscribe() 方法执行的时候。 将传入的 Subscriber 作为 Subscription 返回。这是为了方便 unsubscribe().*/ } /* subscribe()观察者还支持不完整的回调 */ public void incompleteData() { //因为Action1只有一个call方法 并且有返回值 所以被适用于观察者三个回调方法中的onNext onError方法中,因为他们有参无返回值,相当于将下面的action1传入到observable.subscribe(onNextAction); Action1<String> action1 = new Action1<String>() { @Override public void call(String sting) { // do something... } }; //同理action0是onCompleted()的包装方法 因为onCompleted()是无参无返回值的 Action0 action0 = new Action0() { @Override public void call() { // do something... } }; }