EventBus源码解析04-取消订阅
2017-08-27 09:04
288 查看
取消订阅会调用
可以看到,这里会根据subscriber获取eventType集合,再遍历这个集合逐个调用
这里,会根据eventType获取Subscription(被观察者)集合,在遍历subscriptions集合,找到和传入的subscriber相同的对象,将其从subscriptions集合中移除,从而取消订阅。
unregister()
public synchronized void unregister(Object subscriber) { //根据subscriber获取eventType集合 List<Class<?>> subscribedTypes = typesBySubscriber.get(subscriber); if (subscribedTypes != null) { //遍历eventType集合 for (Class<?> eventType : subscribedTypes) { unsubscribeByEventType(subscriber, eventType); } typesBySubscriber.remove(subscriber); } else { Log.w(TAG, "Subscriber to unregister was not registered before: " + subscriber.getClass()); } }
可以看到,这里会根据subscriber获取eventType集合,再遍历这个集合逐个调用
unsubscribeByEventType
private void unsubscribeByEventType(Object subscriber, Class<?> eventType) { //根据eventType获取Subscription(被观察者)集合 List<Subscription> subscriptions = subscriptionsByEventType.get(eventType); if (subscriptions != null) { int size = subscriptions.size(); //遍历subscriptions集合 for (int i = 0; i < size; i++) { Subscription subscription = subscriptions.get(i); //判断subscriber是否相同 if (subscription.subscriber == subscriber) { subscription.active = false; //移除被观察者 subscriptions.remove(i); i--; size--; } } } }
这里,会根据eventType获取Subscription(被观察者)集合,在遍历subscriptions集合,找到和传入的subscriber相同的对象,将其从subscriptions集合中移除,从而取消订阅。
总结
EventBus的取消订阅主要就是根据传入的subscriber,把相应的被观察者(Subscription)从subscriptions集合(之前注册的时候所存放的集合)中移除。final class Subscription { //@Subscribe所在的类 final Object subscriber; //@Subscribe注解的方法 final SubscriberMethod subscriberMethod; }
相关文章推荐
- Android EventBus源码解析 带你深入理解EventBus
- EventBus的使用和源码解析
- Android EventBus源码解析 带你深入理解EventBus
- Android EventBus源码解析 带你深入理解EventBus
- EventBus的源码分析:SubscriberMethodFinder和订阅流程
- EventBus使用及源码解析
- Picasso源码完全解析(七)-- CleanupThread 取消请求
- Android EventBus源码解析 带你深入理解EventBus
- EventBus 源码解析
- EventBus 源码解析(一)
- 开源项目源码解析-EventBus 源码解析
- Android源码基础解析之Dialog取消绘制流程
- EventBus 源码解析
- EventBus 源码解析
- [EventBus源码解析] EventBus.post 方法详述
- EventBus 源码解析
- Android EventBus源码解析 带你深入理解EventBus
- OkHttp3源码解析04-失败重连
- android项目源码解析04:新浪微博客户端源码解析
- android源码解析(二十)-->Dialog取消绘制流程