【RxJava 实践系列】(一)基础知识
来源:互联网 发布:寺库网是正品吗 知乎 编辑:程序博客网 时间:2024/06/05 20:01
【RxJava 实践系列】(一)基础知识
【RxJava 实践系列】(二)创建观察者与被观察者
【RxJava 实践系列】(三)线程控制 — Scheduler
前言
学习RxJava,从入门都放弃已经好几次了。首先由于RxJava上手的确有点小难度;其次她颠覆的我们传统的编程思想,她把编程像糖葫芦一样串起来。在没有一定深度了解的情况下你很难去接受她,但是一旦你弄明白了,你就会发现RxJava好像你的小媳妇,你就是想一层一层揭开她的衣服去了解她。
本文是对RxJava各种操作符在Android平台上的一个简单实践,方便以后查阅。
RxJava是基于观察者模式,所以学习RxJava你最好对观察者模式有一定的了解。
一、基础
1、什么是RxJava
RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)
如果非要用一个词来概括RxJava,那可以概括为“异步”,它就是一个实现异步操作的库;然而它远远比这个定义要强大。
RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。
2、在RxJava中主要有4个角色:
- Observable (可观察者,即被观察者)
- Observer (观察者)
- subscribe (订阅)
- Event(事件)
Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。
二、基本实现
RxJava 的基本实现三部曲:
1. 创建观察者Observer
Observer<String> observer = new Observer<String>() { @Override public void onCompleted() { //执行结果 Log.v(TAG, "onCompleted "); } @Override public void onError(Throwable e) { //执行错误 Log.v(TAG, "onError: "+e); } @Override public void onNext(String str) { //接受数据 Log.v(TAG, "onNext: "+str); } };
onNext():接收发送的数据;onCompleted()、onError()都没执行时onNext()可以一直接受发送的数据
onCompleted():RxJava所有事件完成时候,可以调用onCompleted()方法作为标示;
onError():当事件处理出现异常时框架自动触发onError()方法,当然你也可以根据你的逻辑手动触发;
onCompleted(),onError() 都表示执行完成,有且只有一种结果,后调用的不会执行。
2. 创建 Observable
Observable无法直接new出来,这里我们通过Observable.create()方法创建一个Observable。
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { //发送数据 subscriber.onNext("test data1"); subscriber.onNext("test data2"); subscriber.onNext("test data3"); //发送完成 subscriber.onCompleted(); }});
除了create(),just()、from()等等同样可以创建Observable,后续文字会详细讲解。
3. Subscribe (订阅)
observable.subscribe(observer);
4、组合写法
上述基本实现可以换一种写法,来来来把他们撸成串。这种写法等价于上面分开的写法。
Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { //发送数据 subscriber.onNext("test data1"); subscriber.onNext("test data2"); subscriber.onNext("test data3"); //发送完成 subscriber.onError(null); subscriber.onCompleted(); } }).subscribe(new Observer<String>() { @Override public void onCompleted() { //执行结果 Log.v(TAG, "onCompleted "); } @Override public void onError(Throwable e) { //执行错误 Log.v(TAG, "onError: "+e); } @Override public void onNext(String str) { //接受数据 Log.v(TAG, "onNext: "+str); } });
程序调用流程
// onNext("test data1");// onNext("test data2");// onNext("test data3");// onCompleted();
图解流程
图片来源网络
三、资源
- ReactiveX/RxJava文档中文版 官方翻译
- 给 Android 开发者的 RxJava 详解 作者:扔物线
- Awesome-RxJava github一网友对RxJava学习资源的整理
- 【RxJava 实践系列】(一)基础知识
- 彻底了解RxJava(一)基础知识,RxJava()基础知识
- rxjava系列(一)-- 初识Rxjava
- RxJava理解系列(一)
- 彻底了解RxJava(一)基础知识
- RxJava系列7(最佳实践)
- Rxjava和RxAndroid系列(一)
- 【Android】Rxjava操作符系列(一)
- RxJava系列(一、基础篇)
- RxJava系列一
- 【RxJava 实践系列】(二)创建观察者与被观察者
- 【RxJava 实践系列】(三)线程控制 — Scheduler
- Jquery系列(一) 基础知识
- Runtime系列(一)-- 基础知识
- RxJava 基础知识------------------(1)
- RxJava系列—(一)RxJava基础
- RxJava+RxAndroid+MVP入坑实践(一:基础篇)
- RxJava+RxAndroid+MVP入坑实践(一:基础篇)
- java多线程设计模式Worker Thread(线程池)
- 第十一周 OJ 趣味取小数
- 微信分享朋友圈链接被屏蔽(停止访问)怎么办?
- sysfs and devtmpfs
- rpm和yum
- 【RxJava 实践系列】(一)基础知识
- python中出现SyntaxError: Non-UTF-8 code 解决方法
- 多工程Maven工程的创建
- dubbo_ Linux安装配置
- 自己写属于自己的printf()函数
- 利用maven创建spring-osgi powered 多bundle工程
- 第二十六讲项目4-本月有几天
- C# DataTable的詳細用法
- 浅谈c++虚函数 虚继承的虚表剖析