美文网首页
2018-04-11

2018-04-11

作者: 白程程 | 来源:发表于2018-04-11 18:01 被阅读0次

自己语言理解的EventBus3.0 ,希望可以用简单的语言让你快速了解这个好用的东东!

总体来说 :EventBus3.0 说白了就是一个全局的静态常量EventBus.getDefault().

EventBus.getDefault().register(this);注册之后就放到一个List里边,

EventBus.getDefault().unregister(this); 注销之后就从list里边移除,

EventBus.getDefault().post(...);发送事件的时候通过4种threadMode方式执行(PostThread,MainThread,BackgroundThread,Async)。

展开细说分两部分:1.注册 注销 2.发送消息

1.注册

register(this)时 

1.1 根据该订阅者类名 查找该订阅者所有事件响应函数

1.2 循环每个事件响应函数--得到该事件类型的所有订阅者信息,根据优先级别把自己插入到该事件的订阅者队列中subscriptionsByEventType

1.3 同理得到该订阅者所有事件队列,将该订阅者对象以及订阅的事件保存到 typesBySubscriber 里(方便后续注销操作).

1.4 如果接收sticky事件,立即分发sticky事件。

注销 unregister(this)逆向执行就可以了

通过typesBySubscriber来取出这个subscriber订阅者订阅的事件类型,subscriptionsByEventType里拿出这个事件类型的订阅者列表.取消订阅。

2.发送消息 .post()

首先从subscriptionsByEventType里获得所有订阅了这个事件的是订阅者列表,然后在通过postToSubscription()方法来分发事件,在postToSubscription()通过不同的threadMode在不同的线程里invoke()订阅者的方法


EventBus3.0 完整使用代码


这里只是 自己粗略语言的描述,想理解的更好 https://www.jianshu.com/p/f057c460c77e写的非常好,可以花时间慢慢嚼嚼,很有滋味的。

相关文章

  • 纯粹

    /** * @Author liguo * @Description * @Data 2018-04-11 */ ...

  • mysql错误集锦

    2018-04-11:环境:linux+wdcp+phpservice mysqld status 报错“ERRO...

  • 用户中心

    layout: "post"title: "用户中心"date: "2018-04-11 18:12" 用户中心 ...

  • 用户信息

    layout: "post"title: "用户模块"date: "2018-04-11 09:02" 用户系统 ...

  • 梵塔网络Penta .vs. 本体网络Ontology

    2018-04-11 Penta CEO David Ritter:首创DSC共识算法,突破公链掣肘 4月10日,...

  • 2018-04-11

    2018-04-11 180 戴师傅 简书作者 2018.04.11 21:10 打开App (稻盛哲学学习会)打...

  • 192G147号沈家芬8/4-15/4周检视

    2018-04-11 23:15 · 字数 914 · 阅读 2 · 让生命灿烂如花 没有反思的人生不值得过! ...

  • 孩子的感动

    2018-04-11 星期三 晴 今天,孩子有跟我说起学校里的事情。同学之间嬉戏,他被人说哭了(真是没出...

  • 春日巧遇故人

    春日巧遇故人 新绿层重,新花沐风。 春雨道上,旧人新逢。 xxx YBY 汉城湖的诗韵2018-04-11 Sta...

  • 网络强文~装傻!高人也。

    做人的最高境界:装傻! 来源:2018-04-11 美篇 你骗了我,我仍然相信你, 这是智慧。 你为我捧场,我为你...

网友评论

      本文标题:2018-04-11

      本文链接:https://www.haomeiwen.com/subject/zzezhftx.html