应用场景
你是否在开发的过程中遇到过想在ActivityB中回调ActivityA中的某个函数,但Activity又不能手动创建对象来设置一个Listener什么的? 你是否想在某个Service中想更新Activity或者Fragment中的界面?
在实际项目开发中,经常会遇到当执行某个业务逻辑时,希望调用其他处理逻辑。 通常最简单粗暴的方法是直接依赖其他模块,调用模块相应方法,但这样会带来一些问题:
- 模块间相互依赖,耦合度高;
- 后期维护困难;
- 代码缺少设计,不利于拓展。
Android中Activity、Service、Fragment之间的相互通信比较麻烦,主要有以下几种方式:
- 使用广播,发送者发出广播,接收者接收广播后处理;
- 使用Handler和Message,如下载线程完成下载任务后,给UI发送Message,UI收到Message后更新界面。
以上两种比较繁琐,所以后来人就研究出了一种比较简单有效的方法 事件总线 (定义:针对事件提供统一订阅,发布以达到组件间通信的解决方案。原理:观察者模式。发送者把消息发送到事件总线,然后事件总线在接收者中查到有哪些方法注册了这个事件,如果某个方法注册了这个事件,就触发该方法。)事件总线框架提供了一种更灵活更强大而又更完美解耦的解决方案,在很多场合,从开发效率,执行性能和设计思路上都要优于BroadcastReceiver。