美文网首页
EventBus总结

EventBus总结

作者: 郭海萍 | 来源:发表于2018-12-12 11:34 被阅读0次

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 思否

相关文章

  • EventBus工作原理

    以下总结转自:EventBus源码研读 EventBus工作原理 最后我们再来从设计者的角度看一看EventBus...

  • Rexxar Android 系列学习(4) 错误处理

    EventBus 首先介绍一下 EventBus ,具体可以查看之前总结的 SimpleNews 项目的重构之旅(...

  • EventBus总结

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

  • EventBus总结

    EventBus简述: EventBus基于观察者模式,把发送事件者和接受事件者分开的一种发布/订阅事件总线框架。...

  • EventBus总结

    一、Android消息传递之Handler消息机制(www.cnblogs.com/whoislcj/p/5590...

  • 源码解析EventBus的注册及事件发送

    最近正在学习EventBus源码,正好总结记录一下~ EventBus是一个针对Android优化的发布-订阅事件...

  • Eventbus

    以下都是本人收集和总结的内容: 1. 什么是Eventbus EventBus是一个基于观察者模式的事件发布/订阅...

  • EventBus的简单使用

    EventBus 做个阶段总结 项目上用的越来越多了 之前项目上一直用的是广播 换成eventbus之后感觉世...

  • EventBus初学总结

    什么是EventBus? EventBus是基于发布/订阅者机制的,对事件进行发布和接受,例如Intent、Han...

  • android EventBus总结

    EventBus定义: EventBus是一个基于观察者模式的事件发布/订阅框架,开发者通过极少的代码去实现多个模...

网友评论

      本文标题:EventBus总结

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