Rxjava学习笔记(一)

  • RxJava 是什么

    • 项目地址:https://github.com/ReactiveX/RxJava

    • 官方介绍: a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)

    • 个人总结:它是一个实现异步操作的库,有点类似于AsyncTask、Handler,但是比它们更加简洁,随着程序的逻辑越来越复杂,它依旧能保持简洁。

  • RxJava 基础知识

    • 实现原理

      RxJava的异步实现,是通过一种扩展的观察者模式来实现的。

      类似于控件的点击事件。View是被观察者,OnClickListener是观察者,两者通过setOnClickListener达成订阅关系。订阅之后,被观察者状态发生改变时(View被点击时),观察者会收到相应的事件(OnClickListener收到点击事件)。

    • 基本介绍
      • 基础元素

        Observable //被观察者

        Observer // 观察者

        subscribe //订阅

        Observable 通过 subsribe() 方法和 Observer 实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer

      • 事件回调方法
      /**
       * 事件队列完结。
       * RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。
       * RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
       */
       @Override
       public void onCompleted() {
           
       }
      
       /**
        * 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,
        * 同时队列自动终止,不允许再有事件发出。
        */
       @Override
       public void onError(Throwable e) {
           
       }
      
       /**
        * 普通事件
        */
       @Override
       public void onNext(Object object) {
           
       }
       ```
       在一个正确运行的事件序列中, `onCompleted()` 和 `onError()` 有且只有一个,并且是事件序列中的最后一个。需要注意的是,`onCompleted()` 和 `onError()` 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。
      
      Rxjava学习笔记(一)_第1张图片
      模式图
  • RxJava 实现方法

    • 项目集成
      compile 'io.reactivex:rxjava:x.y.z'
      
    • Hello world
      //TODO 1.创建观察者
              Observer observer = new Observer() {
                  @Override
                  public void onCompleted() {
                      Log.e(Tag, "onCompleted");
                  }
      
                  @Override
                  public void onError(Throwable e) {
                      Log.e(Tag, "onError");
                  }
      
                  @Override
                  public void onNext(String s) {
                      Log.e(Tag, "onNext  " + s);
                  }
              };
      
      //TODO 2.创建被观察者
              Observable createObservable = Observable.create(new Observable.OnSubscribe() {
                  @Override
                  public void call(Subscriber subscriber) {
                      subscriber.onNext("hello world");
                      subscriber.onCompleted();
                  }
              });
      
      //TODO 3.订阅
              createObservable.subscribe(observer);
      

你可能感兴趣的:(Rxjava学习笔记(一))