第一次分析源码,代码讲解比较简单和抽象。也没有太多的个人总结。慢慢来,技术在提升,话语在总结。这是EventBus的最后一篇,望各位好友多多指导和文章尾部点个喜欢,支持支持,才有动力继续祸害。
相关文章:
Android必知必会EventBus之使用篇
Android必知必会EventBus源码分析之注册
Android必知必会EventBus源码分析之发布事件
EventBus的解注册一行代码:
EventBus.getDefault().unregister(this);
让我们一起看看unregister方法
/** Unregisters the given subscriber from all event classes. */
public synchronized void unregister(Object subscriber) {
//通过订阅者,获取该订阅事件类型
List<Class<?>> subscribedTypes = typesBySubscriber.get(subscriber);
if (subscribedTypes != null) {
for (Class<?> eventType : subscribedTypes) {
//进行解绑
unsubscribeByEventType(subscriber, eventType);
}
typesBySubscriber.remove(subscriber);
} else {
logger.log(Level.WARNING, "Subscriber to unregister was not registered before: " + subscriber.getClass());
}
}
在unregister方法中,主要调用了unsubscribeByEventType方法
/** Only updates subscriptionsByEventType, not typesBySubscriber! Caller must update typesBySubscriber. */
private void unsubscribeByEventType(Object subscriber, Class<?> eventType) {
List<Subscription> subscriptions = subscriptionsByEventType.get(eventType);
if (subscriptions != null) {
int size = subscriptions.size();
for (int i = 0; i < size; i++) {
Subscription subscription = subscriptions.get(i);
if (subscription.subscriber == subscriber) {
subscription.active = false;
subscriptions.remove(i);
i--;
size--;
}
}
}
}
通过代码,解注册是比较简单的,就是把Subscription从subscriptionsByEventType进行移除。
完结:
