EventBus源码解析04-取消订阅
来源:互联网 发布:淘宝网开店怎么收费 编辑:程序博客网 时间:2024/06/05 03:53
取消订阅会调用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; }
阅读全文
0 0
- EventBus源码解析04-取消订阅
- EventBus源码解析02-订阅者注册
- EventBus注册,取消注册,订阅,传值,黏性
- EventBus 源码解析
- EventBus 源码解析
- EventBus 源码解析
- EventBus 源码解析
- EventBus 源码解析(一)
- android EventBus源码解析
- EventBus 源码解析
- EventBus源码解析
- Android 源码解析:EventBus
- 源码解析EventBus
- EventBus 源码解析
- EventBus源码解析
- Android EventBus源码解析
- EventBus 3 源码解析
- EventBus -- 源码解析
- SQL Server 学习笔记之约束
- 【IDE】Eclipse的工作空间与项目
- Java中SimpleDateFormat用法详解
- Android下载网络图片资源
- Android版本相机适配问题集合(不断整理更新中)
- EventBus源码解析04-取消订阅
- 红黑树
- SSH框架整合的其它方式
- Oracle Database 12c架构图
- 浅析栈帧
- 检测PC端和移动端的方法总结(转)
- 暑期学习 RNN 笔记
- % invalid END header (bad central directory offset) 问题解决
- 使用增强学习AI玩赛车游戏(Gym-TORCS)