EventBus总结

EventBus一直在使用,对它的原理也大致明白,但是具体的细节却不清不楚的,有时候会想一个问题,让我自己写这么一个功能,能写出来吗??

使用方法就不赘述了,将从以下几点阐述对其的理解

1>总的逻辑

2>具体细节

3>优点与缺点

1.总的逻辑先从订阅开始吧

订阅流程

插播一句:

之前刚开始使用eventbus,然后我在post 事件的类中对其进行了register与unregister,在接受该事件的地方没有加入这两个方法,当然,结果就是事件一直没有得到响应,当时我还很困惑,问了封装这个类的同事,他也不知道为什么,现在有没有觉得我碰到的这个问题很可笑呢,哈哈哈哈哈

EventBus.getDefault().register(this);

上面那张图就是对这行代码背后逻辑的大体解释了..

细节分析

1>EventBus.getDefault()

单例实现

想具体了解单例模式的请移驾https://www.cnblogs.com/zhaoyan001/p/6365064.html

问题1:看到这里实际我是有疑问的,难道创建一个eventbus实例没有需要调用者传入的参数吗?或者我想自定义eventbus呢?

eventbus构造函数
EventBusBuilder具体实现

解答:构造函数传入的EventBusBuilder的实例,builder中是对eventbus初始化数据的一些默认配置,当我想自定义一些配置数据的时候,可以获取builder,然后更改配置,之后调用installDefaultEventBus方法获取到EventBus实例

总结:对我而言,这是细节中的亮点,感觉幼稚的大神,请自行略过(^_^)

eg:

小提示:

建议通过installDefaultEventBus获取到eventbus实例,因为是与单例绑定的,自己如果直接new一个,一般很容易出现一些奇奇怪怪的问题

2>接下来就是register了 

register

细节:ignoreGeneratedIndex

通过使用APT/EventBus annotation processor(EventBus注解处理器),订阅者索引在编译期间就会被创建,注意只有用@Subscriber注解的方法才能被编入索引到,同时subscriber类和事件类必须是public。并且,由于Java注解处理本身的技术限制,@Subscribe 注解不能使用在匿名类中。当EventBus不能使用索引,它将自动恢复到在运行时通过反射的方式,因此它也能正常工作,只是变得更慢了

问题2:

项目中用的是eventBus jar包,我就把它拷到demo工程中了,然后我参考网上Android注解使用之注解编译android-apt如何切换到annotationProcessor - 总李写代码 - 博客园的步骤,生成索引,一直无法生成,对自己的智商....jar包比较老了

3>既然默认为false,那接下来就是findUsingInfo方法了

findUsingInfo方法
prepareFindState

1.点评:这样设计是不是很赞呢!

问题:FIND_STATE_POOL[i] =null;这里设置为null,那么当FindState池里的实例都为null了,这个设计的初衷在哪里呢??

解答:getMethodsAndRelease方法中就重新给FindState池的实例赋值了

2.具体的业务逻辑就不赘述了,对findUsingReflectionInSingleClass一些比较好的细节点说一下,值得开发者借鉴

1>getMethods与getDeclaredMethods的区别

2>if ((modifiers & Modifier.PUBLIC) !=0 && (modifiers &MODIFIERS_IGNORE) ==0) 

这样的判断是不是很赞呢!!!

3>看代码的时候一直对FindState不理解,特此标注一下

2.发送事件的流程

post流程

1>问题:eventbus支持跨进程吗?

解答:不支持,实际当看到它是单例模式获取到的实例,实际就能得到答案了,仅支持多线程

2>这个过程没有做过多赘述,但是建议看看源码,里面各处的 synchronized 关键字以及标志位的使用有很多值得借鉴的地方

3.优缺点

优点:调用很简单,解耦了

缺点:

1.大量的滥用,逻辑分散,出现问题后比较难定位(太过解耦了)

2.代码的可读性差

3.性能问题(虽然网上这么说,但是感觉微乎其微)

备注:还有一些采坑的点,可以看一下这篇文章

老司机教你 “飙” EventBus 3 - 腾讯Bugly - SegmentFault 思否

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351