最近在用RxJava,虽然正常使用没有问题,但过程中产生了很多疑问,比如Observable和Subscriber是怎么联系到一起的?OnSubscribe又是什么时候起作用的,起什么作用?Subscriber和Subscription有什么关系?unsubscribe之后Observable还在运行吗?等等这些疑问,所以顺着这些问题找找答案,梳理一下源码,给自己以后做个记录就不会忘记啦~若有不当欢迎指正,一起进步~
根据我的理解说一下以上几个概念
- Observable - 可被观察者(就是一个可观测的数据源)
- Subscriber - 订阅者(接收可观测数据源并可以进行处理的观察者)
- OnSubscribe - 订阅时(订阅者订阅可被观察者时发生的一系列动作)
- Subscription - 订阅(名词性质,包含了订阅状态和解除订阅的动作)
- Observe - 观测 (对订阅者的处理流程的规范包含三个动作(onError onNext onComplete))
- SubscriptionList(维护一个订阅列表)
有了上边的基本了解再来看看源码分析
通常在Android上一个简单的订阅是这样的
/*其中onSubscribeTimerPeriodically是Observable.OnSubscribe类型,就是一个订阅时,这个订阅时做了那些事?简单一点就做一件事,创建一个Subscription类型的工作线程,拿到订阅者并把工作线程添加进订阅者内部维护的SubscriptionList中去,然后异步向订阅者发送数据(后边详细分析)*/
Observable.create(onSubscribeTimerPeriodically)
.subscribe(mySubscriber)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread());
mySubscriber = new Subscriber<Long>() {
@Override
public void onCompleted() {
}