1: 框架类图(被观察者,观察者,订阅事件)
2: 框架事件流概念
1)抽象的流概念:链式构建流, subscirbeActual 订阅流,观察者回调流
2) 事件的流动是从左到右:如果把每个被观察者看成一个节点,那么节点左侧代表上游,右侧代表下游。
3) Rxjava使用了装饰器模式,所以每次新的被观察的构建都是基于上一个被观察者的,也就是下一个被观察者持有了上一个被观察者的引用。
4) 每次创建新的被观察者,也会创建新的观察者,而这个观察者同样持有下游观察者引用。
3:框架订阅流 subscribeActual & 观察者回调流
1) 从右边到左边实际是执行订阅的过程:
每个被观察者都持有了上游被观察者的引用
当订阅操作执行时,都会调用上游被观察者来执行订阅(即调用被观察者的subscribe函数)。所以从订阅的过程上来看,是从右到左进行的。也就是说最后的一个被观察者依次向上游的被观察者调用subscribe方法。
2)从左边到右边实际是事件的流动的方向:
每个被观察者都会通过subscribe(Observer observer) 传入一个下游的观察者。
每个观察者都持有下游观察者的引用
当处理事件时,最终都会交由下游的观察者来进行处理,也就是把事件向下传递。所以可见整个观察者的回调处理事件也是从左边到右边的一个过程。
4:Rxjava性能问题
在页面销毁后,Observable仍然还有事件等待发送和处理,这个时候会导致Activity回收失败,从而导致内存泄漏。那么解决Rxjava内存泄漏的主要方式就是在页面关闭之前取消所有的订阅。
4.1 :使用 Disposable , 关闭页面时调用dispose()取消订阅。
4.2 :使用CompositeDisposable, 添加一组 Disposable, 在关闭页面时同时取消订阅。
5: Rxjava 衍生框架
1)生命周期相关的 RxLifecycle
2) 权限访问库 RxPermission
3) 控件绑定 RxBinding
4) Rxjava + Retrofit + Okhttp 主流的网络模块搭建
Rxjava : 响应式编程,强大的异步处理能力
Retrofit : 基于Okttp 封装,通过注解形式指定请求的接口
Okttp: 高效的网络访问库