EventBus源码分析(一):入口函数提纲挈领(2.4版本)

EventBus源码分析(一):入口函数提纲挈领(2.4版本)
EventBus源码分析(二):register方法保存事件的订阅者列表(2.4版本)
EventBus源码分析(三):post方法发布事件【获取事件的所有订阅者,反射调用订阅者事件处理方法】(2.4版本)
EventBus源码分析(四):线程模型分析(2.4版本)
EventBus源码解读详细注释(1)register的幕后黑手
EventBus源码解读详细注释(2)MainThread线程模型分析
EventBus源码解读详细注释(3)PostThread、MainThread、BackgroundThread、Async四种线程模式的区别
EventBus源码解读详细注释(4)register时刷新的两个map
EventBus源码解读详细注释(5)事件消息继承性分析 eventInheritance含义
EventBus源码解读详细注释(6)从事件发布到事件处理,究竟发生了什么!

本文是EventBus源码分析的第一篇文章,不拘泥于具体的实现细节,从宏观上把握EventBus的设计思路,而EventBus总体的设计思路为:
EventBus实例保存了事件到订阅者列表的map,发布事件的时候,从该map中取出该事件的所有订阅者,在规定的线程中反射调用所有订阅者的事件处理方法。

DCL单例创建EventBus对象

EventBus提供了静态方法创建EventBus对象,实现方式为标准的DCL双检锁的单例模式。DCL双检锁分为两部分:

  1. 静态易变的defaultInstance属性
  2. 静态的getDefault方法
    ...
    static volatile EventBus defaultInstance;
    ...
    /** Convenience singleton for apps using a process-wide EventBus instance. */
    public static EventBus getDefault() {
        if (defaultInstance == null) {
            synchronized (EventBus.class) {
                if (defaultInstance == null) {
                    defaultInstance = new EventBus();
                }
            }
        }
        return defaultInstance;
    }

但是EventBus并非严格的DCL单例模式,因为构造器并不是私有的,因此并不能保证EventBus实例的唯一性。不同实例之间是总线隔离的,即EventBus实例A发布的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值