RxJava中最常用到的两个类Subscriber<T>的抽象(即订阅者)和Observable<T>(被订阅对象),而转换过程主要用到两个接口类Func1<R,T>和Action<T>,本文通过这4个类来解释rxjava的转换工作机制。
可以参照下图片:
总结:我们把Onsubscribe当成事件发射器,T为原始事件,Observable为被订阅者,Subscriber为订阅者,订阅者的onNext方法为处理事件能力;当我们用订阅者R去订阅被订阅者T时,就需要转换被订阅者(即T转成R,其实就是新建一个被订阅者R);转换被订阅者内部过程主要分工给Func1<R,T>转换器1, Func1<Subscriber<T>,Subscriber<R>>转换器2。
我们的目标订阅者为Subscriber<R>,当订阅者R订阅事件时,会通知被订阅者(一个新建的被订阅者Observable<R>)来发出事件,而被订阅者R本身没持有事件,因而通知他的上级Observable<T>来发出初始事件,事件T是由初始被订阅者Observable<T>的OnSubscribe<T>发射,T被发射出来后,需要有一个订阅者Subscriber<T>来处理,这时候转换器2把目标订阅者Subscriber<R>转成转成订阅者Subscriber<T>,并且把订阅者<R>的处理事件能力给到订阅者<T>,而订阅者<T>在拿到事件T后,他的处理方式就交由刚刚获得的订阅者<R>的能力来处理,因而需要转换器1来把事件T转成事件R(因为订阅者<R>只能处理R事件),再交给订阅者<R>处理。
总流程:最下级订阅者首先通知最下级被订阅者发出事件,然后被订阅者依次通知上级发出事件,直到原始被订阅者发出事件,然后事件从被订阅者依次向下传递,并且由相应的订阅者依次委托下级订阅者处理,直到最下级订阅者处理事件,而中间由转换器对事件和订阅者进行相应转换。