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--;
            
        
    

总结

  1. 注销当前subscriber对象中所有标记了@Subscribe的eventType
  2. 从整个eventbus的缓存中去解除绑定
  3. 逐个eventtype的解除绑定
  4. 循环遍历缓存对象,从中解除绑定

以上是关于EventBus3.0源码解析——05. unregister 注销的主要内容,如果未能解决你的问题,请参考以下文章

EventBus3.0源码解析——06. 总结

Android EventBus3.0使用及源码解析

EventBus3.0源码解析——03. register 注册

EventBus3.0源码解读

EventBus 3 源码解析

EventBus 3 源码解析