美文网首页
Rxjava学习笔记(一)

Rxjava学习笔记(一)

作者: 弓长剑鸣 | 来源:发表于2017-03-13 15:29 被阅读0次
    • 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 实现方法

      • 项目集成
        compile 'io.reactivex:rxjava:x.y.z'
        
      • Hello world
        //TODO 1.创建观察者
                Observer<String> observer = new Observer<String>() {
                    @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<String> createObservable = Observable.create(new Observable.OnSubscribe<String>() {
                    @Override
                    public void call(Subscriber<? super String> subscriber) {
                        subscriber.onNext("hello world");
                        subscriber.onCompleted();
                    }
                });
        
        //TODO 3.订阅
                createObservable.subscribe(observer);
        

    相关文章

      网友评论

          本文标题:Rxjava学习笔记(一)

          本文链接:https://www.haomeiwen.com/subject/dyzfnttx.html