Skip to content

   SimonEventBus类似于Eventbus, 它简化了Activity、Fragment、Service等组件或者对象之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量。

Notifications You must be signed in to change notification settings

curtis2/SimonEventbus

Repository files navigation

   SimonEventBus类似于Eventbus, 它简化了Activity、Fragment、Service等组件或者对象之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量。

申明:本项目是学习自@MrSimp1e Android事件开发总线,所以基本上所有的技术点都是从该开源项目中学习来的,主要是用于作者本人的学习和工作使用。

大家可以直接看原项目,这个项目只用于作者本人的学习使用。 http:https://blog.csdn.net/bboyfeiyu/article/details/44309093


项目涉及到的技术点

  • 1.java 注解
  • 2.java反射
  • 3.java 并发类CopyOnWriteArrayList,ConcurrentHashMap
  • 4.java集合的特性Arraylist,LinkedList等
  • 5.java 对象比较
  • 6.android handlerThread

项目的总体设计:

   AndroidEventBus简约整体设计大致如上图所示,主要分为三个部分,即EventBus、SubscriberMethodHunter、EventHandler。

   EventBus负责订阅对象与事件的管理,比如注册、注销以及发布事件等。在初始时将某个对象注册到EventBus中,EventBus会遍历该对象class中的所有方法,把参数数量为1且用了Subscriber注解标识的函数管理起来,以事件类型和订阅函数Subscriber的tag构建一个EventType作为一种事件类型,某个事件类型对应有一个接收者列表。当有事件发布时,EventBus会根据发布的事件类型与tag构建EventType,然后找到对应的订阅者列表,并且将这些事件投递给所有订阅者。SubscriberMethodHunter负责查找合适的EventType,而EventHandler则负责将这些订阅函数执行到相应的线程中。至此,整个事件总线的操作流程就完成了,当然在将Activity、Fragment等组件注册到EventBus时,不要忘了在这些对象销毁时将它们从EventBus中移除,即调用unregister方法。

事件注册流程图 事件发布流程图

核心类详细介绍

  • EventBus : 事件总线核心类,封装了订阅对象的注册、注销以及事件的发布、投递等,是事件总线最核心的类;
  • EventType : 事件类型对象,由事件Class类型与接收函数tag组成,用于标识一个事件类型;
  • Subscriber : Subscriber注解,作用于函数上,用于标识这个函数是一个事件订阅函数;
  • ThreadMode : 接收函数的执行线程模型,默认执行在UI线程;
  • Subscription : 一个订阅对象的封装类,含有接收对象、目标方法、线程模型;
  • TargetMethod : 目标订阅方法;
  • SubsciberMethodHunter : 订阅方法查找辅助类,根据事件对象查找符合要求的EventType列表,EventBus根据这个返回的列表来投递事件给订阅者;
  • EventHandler : 事件处理器;
  • DefaultEventHandler : 默认的事件处理器,即事件在哪个线程投递,则处理事件也在该线程;
  • UIThreadEventHandler : 事件处理在UI线程的Handler;
  • AsyncEventHandler : 事件处理在一个独立线程的Handler;
  • MatchPolicy : 事件匹配策略接口;
  • DefaultMatchPolicy : 默认的匹配策略,发布事件时,
  • EventBus会查找参数是该事件父类的函数,并且构造对应的EventType;
  • StrictMatchPolicy : 严格的匹配策略,发布事件时只查找参数类型完全匹配的订阅函数;

About

   SimonEventBus类似于Eventbus, 它简化了Activity、Fragment、Service等组件或者对象之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages