首页 > IT职业 > IT职场 > EventBus设计之禅
今日科技快讯
据国外媒体报道,滴滴已获准在美国加利福尼亚州测试自动驾驶汽车。加州监管部门网站显示,DiDi Research America LLC已获批准,可在加州公共道路上测试自动驾驶汽车(需配备司机)。这是第53家获得测试许可的公司,此前,特斯拉、福特、苹果等许多公司已拿到牌照。
作者简介
本篇来自 jokermonn 的投稿,分享了他对 EventBus 源码的理解以及为什么要这么设计的感悟,一起来看看!希望大家喜欢。
jokermonn 的博客地址:
https://juejin.im/user/57201bb479bc440066b06ee4
前言
笔者看过一些知名开源项目的源码,认为 EventBus 算是其中最简单的,甚至复杂程度不在一个级别上。解析源码前先提一下以下几个变量和类,掌握了这些变量和类基本上 EventBus 已经就掌握一半了。
METHOD_CACHE:Map
Subscription 类(文中称订阅信息):关注类中两个字段,一个是 Object 类型的 subscriber,该字段即为注册的对象(在 Android 中时常为 Activity);另一个是 SubscriberMethod 类型的 subscriberMethod,细节如下。
subscriberMethod:SubscriberMethod 类型(文中称订阅方法)。关注类中有个字段 eventType 是 Class> 类型,代表 Event 的类类型。
typesBySubscriber:Map
subscribtionsByEventType:Map
Register
直接查看 EventBus#register() 源码:
public void register(Object subscriber) {
Class> subscriberClass = subscriber.getClass();
// 根据当前注册类获取 List
List subscriberMethods = subscriberMethodFinder.findSubscriberMethods(subscriberClass);
synchronized (this) {
for (SubscriberMethod subscriberMethod : subscriberMethods) {
// subsciber 对 List 中每个 SubscriberMethod 进行订阅
subscribe(subscriber, subscriberMethod);
}
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2815/viewspace-2802091/ ,如需转载,请注明出处,否则将追究法律责任。