Observer:观察者模式中的“观察者”,可接收Observable发送的数据;
subscribe:订阅,观察者与被观察者,通过subscribe()方法进行订阅;
Subscriber:也是一种观察者,在2.0中 它与Observer没什么实质的区别,不同的是 Subscriber要与Flowable(也是一种被观察者)联合使用,该部分内容是2.0新增的
2.关系:
3.使用:
RxJava用法多种多样,其多样性体现在Obserable(被观察者)的创建上。
case R.id.button: //基础方式 Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { //执行一些其他操作 //............. //执行完毕,触发回调,通知观察者 e.onNext("我来发射数据"); e.onComplete(); } }); observable.subscribe(observer); break; case R.id.button2: //just()方式 //直接发送到next() Observable<String> observable1 = Observable.just("Hello"); observable1.subscribe(observer); break; case R.id.button3: //fromIterable()方式 //发送集合到next() List<String> list = new ArrayList<String>(); for (int i = 0; i < 10; i++) { list.add("Hello" + i); } Observable<String> observable2 = Observable.fromIterable((Iterable<String>) list); observable2.subscribe(observer); break; case R.id.button4: //defer()方式 //当观察者订阅时,才创建Observable,并且针对每个观察者创建都是一个新的Observable。 // 以何种方式创建这个Observable对象,当满足回调条件后,就会进行相应的回调。 Observable<String> observable3 = Observable.defer(new Callable<ObservableSource<? extends String>>() { @Override public ObservableSource<? extends String> call() throws Exception { return Observable.just("hello"); } }); observable3.subscribe(observer); break; case R.id.button5: //定时发送 Observable<Long> observable4 = Observable.interval(2, TimeUnit.SECONDS); observable4.safeSubscribe(observer1); break; default: case R.id.button6: //timer( )方式 //延时发送 Observable<Long> observable5 = Observable.timer(2, TimeUnit.SECONDS); observable5.safeSubscribe(observer1); break;
observer = new Observer<String>() { @Override public void onSubscribe(Disposable d) { } @Override //观察者接收到通知,进行相关操作 public void onNext(String aLong) { System.out.println("我接收到数据了"); } @Override public void onError(Throwable e) { } @Override public void onComplete() { System.out.println("序列结束"); } }; observer1 = new Observer<Long>() { @Override public void onSubscribe(Disposable d) { } @Override //观察者接收到通知,进行相关操作 public void onNext(Long aLong) { System.out.println("我接收到数据了" + aLong); } @Override public void onError(Throwable e) { } @Override public void onComplete() { System.out.println("序列结束"); } };