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对象,使用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的特点。
- RxJava学习笔记之初识(一)
- RxJava学习(一),RxJava初识
- RxJava学习一:初识
- Flume学习笔记之初识(一)
- RxJava 学习笔记(一)
- RxJava学习笔记(一)
- RxJava学习笔记(一)
- RxJava 学习之(一)
- rxjava系列(一)-- 初识Rxjava
- RxJava 学习笔记一
- RxJAVA学习笔记(一)
- Rxjava学习笔记(一)
- Rxjava学习笔记(一)
- 学习笔记之初识数据库一
- RxJava学习笔记(一)--- 基础篇
- RxJava学习笔记(一)概念
- RxJava 学习(一)
- RxJava学习(一)
- LeetCode 169.Majority Element--Divide and Conquer(分治法)
- JS ASCII码转换代码
- 解决mysql5.7安装之后密码不正确
- 迭代器Iterator与for循环的区别
- JAVA volatile关键字
- RxJava学习笔记之初识(一)
- Mysql数据库常用的存储引擎
- mysql优化系列03==Myisam优化
- 字符串分隔
- ThinkPHP 项目构建与入口文件概念
- Error:UNEXPECTED TOP-LEVEL ERROR:
- Map理解
- Java GC算法以及垃圾收集器
- JAVA_20代码块