Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > Android EventBus粘性事件

Android EventBus粘性事件实现机制探究

作者:长安皈故里

最近项目做组件化,需要进行组件化的通信,有时候可能会出现异步的情况,事件接收方还没准备好事件就已经发送过来了,这时候想到了EventBus的粘性事件,这篇文章主要给大家介绍了关于Android EventBus粘性事件实现机制的相关资料,需要的朋友可以参考下

众所周知,EventBus是支持粘性事件的,即可以先发送粘性事件,然后再注册,代码如下:

@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
fun registerEventBus(o: Any) {    
}
EventBus.getDefault().postSticky(Any())
EventBus.getDefault().register(this)

接下来我们就来探究下EventBus的粘性事件是如何实现的。

postSticky()内部机制

可以看到这个属性是一个Map集合,其中key为事件类型的class对象,value为对应的事件类型。

postSticky()小结

上面这么多代码逻辑,其实只干了一件事,就是将这个粘性事件添加到了stickyEvents这个集合中。之后的逻辑虽多,但和粘性事件没啥关系。

register内部机制

查找当前类通过@Subscribe注册的所有事件订阅方法,并返回一个List<SubscriberMethod>集合,其中SubscriberMethod就是对每个注册的订阅方法和当前注册类的封装

从上面可以看到,最终是通过反射来实现的订阅了粘性事件方法的执行。

register小结

该方法最终会判断当前是否存在注册EventBus前发送的粘性事件,且当前注册类中存在订阅该事件类型的方法,然后立即执行。

总结

以上就是EventBus粘性事件的内部实现机制,总体来说不算复杂,大家看着文章跟着源码一步步分析应该就很容易理解这部分实现逻辑了。

到此这篇关于Android EventBus粘性事件实现机制的文章就介绍到这了,更多相关Android EventBus粘性事件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文