前言
不推荐使用EventBus框架,此框架用的随意将是灾难,介于一开始接触的人都不可能很正规的使用它。所以,推荐了解它,但是不使用它。为什么需要了解它是因为别人可能会使用这个,并且在一些特殊情况下EventBus的确有自己的优势。
介绍
GitHub:https://github.com/greenrobot/EventBus
优点
- 简单统一数据传递
- 有粘性消息机制,保证了消息的接收的必达
- 可以选择的主次线程接收消息,无需写大量代码切换线程
- 使用实体类传递数据且无需序列化,摆脱了用Bundle以Key:Value形式传递字段,序列化实体类
- 在activity与activity,或者Service与activity传递大数据时的选择之一。因为序列化大数据进行传递时,是十分耗时缓慢的。用EventBus比序列化更快。
缺点
- 滥用它,EventBus可以大量解耦项目,但是如果你大量的使用它会产生一个非常危险的后果,你需要定义大量的枚举类或者新的实体类来区分接收者。管理EventBus的消息类别将会你的痛苦
- 不刻意写大量实体类与枚举类代码来管理事件的收发,那么在大量使用后你就会对着EventBus每天在玩找蛇头与蛇尾的游戏。
- 在非前台组件中使用它,不只在Activity或者Service,广播里使用它。 而是将它使用到每一个工具类 或者 后台业务类,除了让数据发送与接收更加复杂。别忘记了Java本身就是面对对象语言,它有接口、抽象可以实现来发送与接收数据。你可以用各种设计模式,比如观察者模式,来更好的优化与独立自己的业务。不需要依赖EventBus。
- EventBus有入侵性,请不要在你独立的模块里使用EventBus来分发数据到外部。多使用接口与Activity上下传值的方式传递数据
使用方式
1.添加依赖
implementation 'org