RxJavaAndroid知识Android 提高篇

RxJava2.0使用详解(一)

2017-07-11  本文已影响971人  Angels_安杰

一、前言

二、从Demo到原理

  //1、观察者创建一个Observer
  Observer observer = new Observer() {
      @Override
    public void onSubscribe(@NonNull Disposable d) {
          Log.d(TAG, "onSubscribe");
      }

      @Override
    public void onNext(@NonNull String s) {
          Log.d(TAG, "onNext data is :" + s);

      }

      @Override
    public void onError(@NonNull Throwable e) {
          Log.d(TAG, "onError data is :" + e.toString());
      }

      @Override
    public void onComplete() {
          Log.d(TAG, "onComplete");
      }
  };

  Observable observable = Observable.create(new ObservableOnSubscribe() {
      @Override
    public void subscribe(@NonNull ObservableEmitter e) throws Exception {
          e.onNext("hello");
          e.onNext("world");
          e.onComplete();

      }
  });
  observable.subscribe(observer);

思路梳理


-ObservableCreate又是个什么东东呢?我们分步来,先看ObservableCreate的两个方法

  public final class ObservableCreate<T> extends Observable<T> {
      final ObservableOnSubscribe<T> source;

      public ObservableCreate(ObservableOnSubscribe<T> source) {
          this.source = source;
      }

      @Override
    protected void subscribeActual(Observer<?super T> observer) {
          CreateEmitter<T> parent = new CreateEmitter<T>(observer);
          observer.onSubscribe(parent);

          try {
              source.subscribe(parent);
          } catch (Throwable ex) {
              Exceptions.throwIfFatal(ex);
              parent.onError(ex);
          }
      }
  .....
  }

思路梳理

1、传入的ObservableOnSubscribe最终被用来创建成ObservableOnSubscribe
2、ObservableOnSubscribe持有我们的被观察者对象以及订阅时所触发的回调subscribeActual
3、在subscribeActual实现了我们的主要逻辑,包括observer.onSubscribe(parent);,source.subscribe(parent);,parent.onError(ex);的调用
4、在Observable的subscribe被调用时开始执行事件分发流程。


三、总结

上一篇 下一篇

猜你喜欢

热点阅读