RxJava学习笔记之初识(一)

来源:互联网 发布:mt4行情分析软件 编辑:程序博客网 时间:2024/05/29 08:35

背景

最近浏览一些项目,好多都冠名为RxXXX,查询了一番,算是了解了一些皮毛。既然这么受欢迎,咱也学习一下。

RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.

在Github上RxJava是这么介绍自己的,作为JVM的一个扩展,用于使用Java VM的可观察序列编写异步和基于事件的程序的库。不要问我英语为啥这么好,我google翻译的。ok,关键词:扩展、异步,基于事件,后面我会围绕这几个关键词来揭开RxJava的神秘面纱。

概念

在开始之前,要先知道下面几个单词的意思,因为很容易记混了。

名称 含义 Observable 可被观察者,也就是被观察者(公众号) Observer 观察者(人) subscribe 订阅(主动关注该公众号)

举个栗子,微信的公众号就像是一个被观察者,当某人关注了这个公众号,就可以接收到公众号发送的消息,但如果没有关注该公众号,那么一切故事都不会发生。

简单订阅过程分析

创建一个Observable对象,使用Observable.create即可。

Observable<String> myObservable = Observable.create(new ObservableOnSubscribe<String>() {        @Override        public void subscribe(ObservableEmitter<String> e) throws Exception {            e.onNext("谢谢关注!");            e.onComplete();        }    });

myObservable发出消息后调用onComplete()表示事件队列完成,用myObserver来处理刚才收到的内容。

Observer<String> myObserver = new Observer<String>() {        @Override        public void onSubscribe(Disposable d) {            System.out.print("onSubscribe");        }        @Override        public void onNext(String value) {            System.out.print("onNext" + value);        }        @Override        public void onError(Throwable e) {            System.out.print("onError");        }        @Override        public void onComplete() {            System.out.print("onComplete");        }    };

打印结果如下:

09-11 15:23:40.635 27057-27057/? I/zxf: onSubscribe
09-11 15:23:40.635 27057-27057/? I/zxf: onNext谢谢关注!
09-11 15:23:40.635 27057-27057/? I/zxf: onComplete

扩展

创建一个被观察者对象还有一种更为简洁的写法,用just(T...)可以添加多个事件内容,

Observable<String> myObservableEasy =            Observable.just("谢谢关注!");

如果观察者只关心onNext()方法的,则只需要创建一个Consumer对象就可以了

Consumer<String> myConsumer = new Consumer<String>(){        @Override        public void accept(String s) throws Exception {            Log.i("zxf","onNext" + s);        }    };

观察者也可以用Subscriber来创建,在使用上和Observer基本是一样的。

Subscriber<String> subscriber = new Subscriber<String>() {        @Override        public void onSubscribe(Subscription s) {        }        @Override        public void onNext(String s) {        }        @Override        public void onError(Throwable t) {        }        @Override        public void onComplete() {        }    };

注意

  • ObservableEmitter提供了onNext()onError()onComplete()方法,onNext()可以发送多个事件,onError()代表事件中断,onComplete()则是消息完成,onComplete()onError()是互斥的,有且只能存在一个。
  • 不要搞错了订阅关系,Observable订阅Observer,看起来好像是弄反了,其实不是,只是考虑了流式API的特点。
原创粉丝点击