您当前的位置: 首页 >  缓存

韩曙亮

暂无认证

  • 1浏览

    0关注

    1068博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【EventBus】事件通信框架 ( 订阅类-订阅方法缓存集合 | 事件类型-订阅者集合 | 订阅对象-事件类型集合 )

韩曙亮 发布时间:2021-09-27 15:22:28 ,浏览量:1

文章目录
  • 前言
  • 一、订阅类-订阅方法缓存集合
  • 二、事件类型-订阅者集合
  • 三、订阅对象-事件类型集合

前言

首先声明几个数据结构 , 参考 【EventBus】EventBus 源码解析 ( 注册订阅者总结 | 从封装的数据结构角度分析 EventBus ) 博客 , 仿 EventBus , 设置几个重要的集合 ;

一、订阅类-订阅方法缓存集合

METHOD_CACHE 作用仅用于作为订阅方法的缓存类 ,

  • Key - 订阅类类型 ;
  • Value - 订阅方法 MySubscriberMethod 的集合 ;

每个类可能会创建多个对象 , 当第一个对象注册后 , 就将该类类型与类中的订阅方法 , 都缓存到该 Map, CopyOnWriteArrayList> subscriptionsByEventType ;

  • Key - 订阅者方法事件参数类型 ;
  • Value - 封装 订阅者对象 与 订阅方法 的 MySubscription 集合 ;

在构造函数中初始化该集合 ;

CopyOnWriteArrayList 在写入数据时会拷贝一个副本 , 写完之后 , 将引用指向新的副本 , 该集合的线程安全级别很高 ;

该集合的重要作用就是进行消息转发 , 通过 post 传递进来一个消息对象 , 该消息对象的类型 就是 订阅者方法事件参数类型 , 通过调用 subscriptionsByEventType.get() 方法 , 可以获取到一个CopyOnWriteArrayList> 集合 , 该集合中的元素 MySubscription 对象就是 接收该类型消息的 订阅者对象 + 订阅方法 的封装类 ;

    /**
     * Key - 订阅者方法事件参数类型
     * Value - 封装 订阅者对象 与 订阅方法 的 MySubscription 集合
     * 在构造函数中初始化
     * CopyOnWriteArrayList 在写入数据时会拷贝一个副本 ,
     *      写完之后 , 将引用指向新的副本 ,
     *      该集合的线程安全级别很高
     */
    private final Map subscriptionsByEventType;
三、订阅对象-事件类型集合

订阅对象-事件类型集合 : Map

关注
打赏
1663594092
查看更多评论
0.0398s