RxJava
什么是RxJava?
官网解释:RxJava 是 Reactive Extensions 的 Java VM 实现:一个使用”可观察序列“实现组合异步和基于事件的类库。它扩展了观察者模式以支持数据/事件序列,并添加了运算符,允许您以声明方式将序列组合在一起,同时抽象出对低级线程、同步、线程安全和并发数据结构等事物的关注。
个人理解:
RxJava是一个基于观察者模式扩展的事件驱动的JavaAPI类库,开发者可以在RxJava中灵活的搭配事件驱动的组合顺序,不必关心繁琐的调用链实现。
角色概念
Observable
被观察者。RxJava的核心类,该框架的使用入口,定义了响应驱动的基本逻辑。从名字就可以看出来他在观察者模式中的角色-被观察者。但是与传统的观察者模式对比,更像是一个发布者。
Subscriber
订阅者/观察者。通过继承Observer(监听动作)和Subscription(订阅动作)提供一种从 Observable 接收推送通知的机制,并允许手动取消订阅这些 Observable。开发者可以重写一些方法来实现自己想要的效果,可重写的方法有:
-
onNext(String s)
监听下一个 item 。Observer监听Observable上发出的每一个 item ,只有当onCompleted()或者onError(Throwable e)被调用时,这个方法才会停止调用。
-
onCompleted()
通知Observer,Observable已完成发送基于推送的通知。
-
onError(Throwable e)
通知Observer,Observable遇到错误情况
-
onStart()
当 Subscriber 和 Observable 已连接但 Observable 尚未开始发出 items 或向 Subscriber 发送通知时,将调用此方法。覆盖此方法以向您的订阅添加任何有用的初始化,例如启动背压。
-
unsubscribe()
取消订阅/取消观察。
原理
Observable与Subscriber是开发者最常用的的两个类,当我们在使用RxJava时,最常见的形式是自定义观察者Subscriber和被观察者Observable,然后通过调用
Observable.subscribe(Subscriber<? super T> subscriber)
来启动RxJava。下面是单个观察者的操作调用流程: