什么是RxJava?
1.是什么?
1.RxJava是一个库
2.RxJava实现了由可观察序列来组织的代码逻辑:链式调用
3.RxJava实现了基于异步的,基于事件的链式调用机制
2.优点
1.链式调用:代码逻辑简洁
2.越来越多的框架采用了RxJava的框架
3.基本概念
被观察者(对象):Observable
观察者(对象):Observer
订阅(注册):Subscribe
事件(观察者回调接口)
onNext()
onComplete()
事件队列完毕(没有新的next())
onError()
事件队列异常:报出异常,并终止队列
4.基本实现
1.创建Observer:
1)onNext()
2)onComplete()
3)onError()
最终使用的是Subscriber:Observer的子抽象类:
1)onNext()
正常返回时业务处理:例如界面刷新显示
2)onComplete()
所有事件处理完毕时调用
例如:在此位置可以隐藏进度条
3)onError()
当前调用链任何一个环节报错都将终止流程,并报错
例如:在此位置可以弹出异常
4)onStart():
subscriber的方法,在订阅时(事件开始之前)调用,
例如:在此位置可以显示进度条???注意主线程
5)unsubscribe():
subscriber实现的接口subscription的方法,用于取消订阅。
例如:当退出当前界面时,可以取消数据的拉去和界面的刷新
这个方法很重要,因为subscribe之后,observable会保留对subscriber的引用,不调用该方法可能会内存泄露
2.创建observable:
observable决定什么时候触发事件,及触发什么事件。
被观察者需要制定事件触发规则,即调用事件序列
oncreate(OnSubscribe?)
just(T…)
from(T[])
3.Subscribe()
Observable.subscribe(Subscriber)
public Subscription subscribe(Subscriber subscriber) {… subscriber.onStart();… onSubscribe.call(subscriber);… return subscriber;}
Observable.subscribe(Observer)
4.Scheduler
调度器,用于实现异步机制\n即后台处理,前台回调
在不指定线程的情况下,\nRxJava遵循在哪个线程subscribe(),\n就在哪个线程产生事件;
在那个线程产生事件,就在哪个线程消耗事件。\n如果想要多线程异步处理,就要使用scheduler
Scheduler API
Scheduler.immediate()
运行在当前的线程
Scheduler.newThread()
启用新线程,并在新线程执行事件
Scheduler.io()
I/O操作的scheduler,相比newThread(),\n使用无数量上限的线程池,可线程重用,因此其更有效率
Scheduler.computation()
计算所使用的scheduler,\n使用数量固定的线程池,\n用于CPU的高密度计算。\n不要把I/O操作放在该scheduler
Androidscheduler.mainThread()
主线程
subscribeon()
指定事件发生的线程
observeron()
指定事件消费的线程
5.Operater
所谓变换,就是将事件序列中的对象或者整个事件序列进行处理,转换成新的事件序列或事件
API
map()
事件对象的转换
flatmap()
事件序列转换成新的observable事件序列
switchmap()
相比flatmap,switchmap可以停止之前发出的事件
filter()
过滤:传入过滤条件
take()
截取数量
doOnNext()
在subscriber消费事件之前被调用
throttleFirst()
在每次时间触发后一定时间内丢弃新的事件,\n常用作去抖,比如按键去抖
变换的原理
lift()
针对事件项和事件序列的转换
compose()
针对observable本身的整体转换