美文网首页
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写的非常好,可以花时间慢慢嚼嚼,很有滋味的。

    相关文章

      网友评论

          本文标题:2018-04-11

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