Rxjava,学习android

doOnNext()

当需要插入一个方法,但是不对Observe产生影响的时候,可以用doOnNext,(map的返回值是会影响下层的)。

image.png image.png

Rxjava的设计模式

标准观察者设计模式

微信公众号就是典型的观察者设计模式。公众号=被观察者,用户=观察者,关注公众号=订阅。所以公众号一推送消息,所有观察者都能收到消息。
观察者设计模式就是:多个观察者去订阅一个被观察者,当被观察者发生改变的时候,所有观察者都能收到通知。

image.png

具体实现:

被观察者抽象(公众号) image.png
被观察者实现(公众号)
image.png

观察者抽象(用户)
image.png
观察者实现(用户)
image.png

测试类
image.png

RxJava观察者设计模式

RxJava的观察者设计模式,其实叫发布订阅模式更为合理。

普通观察者设计模式:被观察者(一对多)观察者。RxJava的:被观察者(多对一)观察者

普通观察者设计模式:被观察者内部有一个容器(存放观察者的列表),然后去遍历列表给观察者发送消息。RxJava的:被观察者内部没有列表,被观察者和观察者中间多了一个中间层(发射器),被观察者给发射器发消息,发射器再给观察者发消息,这样使得两者解耦了
image.png

源码解析

image.png

1.自定义观察者
观察者接口里就四个方法:onSubscribe()—执行所有代码前先调用这个方法,如可以弹加载窗。 还有onComplete完成等等。
image.png

2.新建观察者

image.png

image.png

3.订阅

image.png

image.png

subscribeActual()这个方法调用哪个具体得看上层是啥,这个例子里是ObservableCreat的

image.png

aaaa.png

调用发射器的onNext()方法 image.png image.png

由上面代码可以看出Rxjava的设计模式
,其实是将自定义观察者和自定义被观察者(source)通过订阅关联起来,而在上层被观察者那,会进行包装,被观察者调用下层的onNext,下层在调用下层的onNext直到Observer的onNext

RxJava简单订阅过程.png

Hook

Hook机制:钩子、拦截器、监听。在RxJava执行前会有一个全局的拦截器,能拦截各种东西,如能知道所有的map(数量),create等。

image.png

image.png

image.png

所以全局的自定义hook,就是调用这个方法
image.png

map

image.png

image.png image.png image.png

加入map以后,就变成了拆包封包的过程了。当调用 ObservableMap.subscribe(终点)订阅方法的时候, 会调用subscribeActual(observer) observer就是终点。
订阅一开始,会将终点传入ObservableMap(终点),然后整个ObservableMap(终点)打包成一个包裹,传入上层。上层 map 再将 下层 打包ObservableMap(ObservableMap(终点)),这样一直打包到顶层。也就是所谓的洋葱模型。

调用关系,从订阅开始就把终点开始一层一层向上打包,然后调用onNext的时候,一层一层向下拆包 image.png

封包拆包
3.jpg

装饰模型

链式调用,create返回Observable,下层map返回Observable这样一层一层的装饰叫做装饰模型。
装饰模型.png

总结

Rxjava的设计模式,先通过装饰模型,从上到下的链式调用装饰,然后从订阅的那个触发点,从终点开始 一层一层的封包,调用OnNext的时候又一层一层的拆包向下调用。 终极三部曲.png

线程切换

线程切换就两,subscribeOn订阅者运行在哪,observeOn观察者运行在哪
下调用。 [外链图片转存中…(img-Ri9mfRiv-1642658518094)]

线程切换

线程切换就两,subscribeOn订阅者运行在哪,observeOn观察者运行在哪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值