EventBus3.0源码解析——05. unregister 注销
Posted 夜辉疾风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EventBus3.0源码解析——05. unregister 注销相关的知识,希望对你有一定的参考价值。
unregister (注销)
unregister(Object subscriber)
public synchronized void unregister(Object subscriber)
//获取当前Subscriber对象所缓存的所有eventType对象
//这里的eventType代表Subscriber对象中所有标记了@Subscribe的method
List<Class<?>> subscribedTypes = typesBySubscriber.get(subscriber);
if (subscribedTypes != null)
for (Class<?>Subscription对象 eventType : subscribedTypes)
//将当前Subscriber对象中所有的eventType对象解除绑定
unsubscribeByEventType(subscriber, eventType);
//清除缓存
typesBySubscriber.remove(subscriber);
else
logger.log(Level.WARNING, "Subscriber to unregister was not registered before: " + subscriber.getClass());
unsubscribeByEventType()
//将subscriber对象中的某个eventType对象解除绑定,即注销
private void unsubscribeByEventType(Object subscriber, Class<?> eventType)
//获得eventbus中缓存的所有标记了eventType的Subscription对象
List<Subscription> subscriptions = subscriptionsByEventType.get(eventType);
if (subscriptions != null)
int size = subscriptions.size();
for (int i = 0; i < size; i++)
//从中找出与当前subscriber对应的Subscription对象
Subscription subscription = subscriptions.get(i);
if (subscription.subscriber == subscriber)
//找到了目标Subscription对象,然后解除绑定
subscription.active = false;
subscriptions.remove(i);
i--;
size--;
总结
- 注销当前subscriber对象中所有标记了@Subscribe的eventType
- 从整个eventbus的缓存中去解除绑定
- 逐个eventtype的解除绑定
- 循环遍历缓存对象,从中解除绑定
以上是关于EventBus3.0源码解析——05. unregister 注销的主要内容,如果未能解决你的问题,请参考以下文章