首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EventBus:所有子类都接收事件

EventBus是一种事件总线机制,用于在应用程序的不同组件之间进行事件的发布和订阅。它允许不同组件之间解耦,使得它们可以独立地进行通信,从而提高了代码的可维护性和可扩展性。

EventBus的主要特点包括:

  1. 事件发布和订阅:EventBus允许组件发布事件并订阅感兴趣的事件。当一个事件被发布时,所有订阅了该事件的组件都会收到通知。
  2. 解耦:使用EventBus可以将组件之间的直接依赖关系解耦,从而降低了组件之间的耦合度。组件只需要关注自己感兴趣的事件,而不需要知道事件的发布者是谁。
  3. 灵活性:EventBus可以支持多个事件和多个订阅者。一个事件可以有多个订阅者,一个订阅者也可以订阅多个事件。
  4. 异步通信:EventBus可以支持同步和异步的事件通信。同步通信意味着事件发布者会等待所有订阅者处理完事件后才继续执行,而异步通信则不会阻塞事件发布者的执行。

EventBus的应用场景包括但不限于:

  1. 消息传递:当需要在不同组件之间传递消息时,可以使用EventBus来发布和订阅相关的事件。
  2. 事件驱动编程:当需要使用事件驱动的编程模型时,可以使用EventBus来实现组件之间的通信。
  3. 解耦应用程序:当需要解耦应用程序的各个组件时,可以使用EventBus来降低组件之间的耦合度。

腾讯云提供了一个名为"Tencent Cloud Message Queue (CMQ)"的产品,它可以作为EventBus的替代方案。CMQ是一种高可靠、高可用的消息队列服务,可以实现消息的发布和订阅。您可以通过以下链接了解更多关于CMQ的信息:

https://cloud.tencent.com/product/cmq

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 接口的所有子类需要执行相同处理逻辑的推荐姿势

一、背景 在实际开发过程中,有些时候我们可能会遇到这样的场景:我们定义接口给上游使用,不同的业务类型定义不同的子类型,实现该接口的某个函数,但是这些子类型会有很多公共的逻辑(公共的步骤)。...如果将这部分代码定义为工具方法,就需要在每个子类中都执行对应的调用。 如果有些公共步骤的返回值和接口中定义的返回值一致时,很容易出现漏调用的情况。...那么,该如何 “强制”子类型都要执行一些相同的步骤呢? 二、描述 下面都是伪代码,大家不必纠结于具体细节,理解意思即可。...如果我们想让新建子类时,不需要担心遗漏这段公共的逻辑,该怎么办? 三、方案 如果大家对设计模式比较熟悉的话,这种场景我们很自然地会联想到模板模式。 我们将采用这种设计模式,对代码进行改造。...(2)可以将 SomeInterface 改为抽象类(AbstractSomeService),something定义为 public ,将 builPart 定义为抽象函数,让子类去重写。

85720

EventBus的优雅封装

通常我们在使用EventBus的时候都是直接需要接收通信的Activity/Fragment中通过EventBus.getDefault().register(this)订阅事件,在需要发起通信的逻辑直接调用...但是要是一个项目中有很多地方都使用EventBus来通信,比如重新登录后更新各个页面的登录状态,或者是接收到通知更新消息提示等,这样直接使用的话代码重复率很高,并且呢,如果以后升级或者更换EventBus...* * @return true绑定EventBus事件分发,默认不绑定,子类需要绑定的话复写此方法返回true. */ protected boolean isRegisterEventBus...Base类的子类需要去实现 isRegisterEventBus 方法,来返回是否绑定EventBus,那对于不绑定EventBus的类来说不是很累赘麻烦嘛。...* * 粘性事件,在注册之前便把事件发生出去,等到注册之后便会收到最近发送的粘性事件(必须匹配) * 注意:只会接收到最近发送的一次粘性事件,之前的会接受不到。

1.1K40

Android模块化专题(二)- 模块通信和模块间服务调用

模块通信 有这样一个场景,就是APP中的登录成功事件,需要在多个模块中都要监听到,登录页面是在用户中心的模块中,而购物车这个模块也关心用户是否登录成功这个事件,如何让登录成功这个事件,让所有除用户中心的其他模块都能收到这个事件呢...想要实现各模块接受某一个事件,按照EventBus的用法,发送事件首先得有一个Event Bean,在示例项目中在module_base中定义了一个LoginStateEvent,因为各子模块依赖module_base...模块,所以子模块都能够接收这个事件。...));   然后购物车模块如果关心这个登录成功事件,就只要在这个购物车页面ShoppingCartMainFragment注册EventBus 接收LoginStateEvent的事件即可: @Subscribe...首先,为了所有子类模块都能共享这个方法,我们在module_base中定义一个服务接口: package com.finddreams.module_base.utils; import com.alibaba.android.arouter.facade.template.IProvider

1.4K30

BroadcastReceiver三问—美团真题

:exported=["true" | "false"] //继承BroadcastReceiver子类的类名 android:name=".mBroadcastReceiver" //具有相应权限的广播发送者发送的广播才能被此...先说说BroadcastReceiver的内部原理:大家知道BroadcastReceiver是一个系统级的广播,意思是手机里所有的app都能监听和发送,所以BroadcastReceiver肯定是一个跨进程的通信...我觉得有四种类型比较重要: 无序广播,也就是默认的广播类型,无序广播对所有的广播接收者而言,是无序的。也就是说,所有接收者无法确定接收时序的顺序,这样也导致了,无序广播无法被停止。...当它被发送出去之后,它将通知所有这条广播的接收者,直到没有与之匹配的广播接收者为止。 有序广播,通过 Context.sendOrderedBroadcast() 方法来发送。...BroadcastReceiver 和 EventBus 有啥不同? 我觉得对于应用内的事件传播,EventBus基本可以替代广播了。

96520

老司机教你“飙”EventBus3

也就是说EventBus在收到一个事件时,就可以根据这个事件的类型,在subscriptionByEventType中找到所有监听了该事件的订阅者及处理事件的回调方法。...也就是说每个回调方法都有自己的优先级,执行线程和是否接收黏性事件,提高了事件分发的灵活程度,接下来我们在看核心功能的实现时更能体现这一点。...这里就能看到poster的调度事件功能,同时可以看到调度的单位细化成了Subscription,即每一个方法都有自己的优先级和是否接收黏性事件。...我们记得在注册时,EventBus会通过SubscriberMethodFinder来遍历注册对象的Class的所有方法,筛选出符合规则的方法,并作为订阅者在接收事件时执行的回调,我们直接来看看SubscriberMethodFinder.findSubscriberMethods...所以在使用EventBus的模块,如果在回调上有环路,而且回调方法复杂到了一定程度的话,就要考虑把接收事件专门封装成一个子模块,同时考虑避免出现事件环路。 5.

1.2K80

老司机教你 “飙” EventBus 3

也就是说 EventBus 在收到一个事件时,就可以根据这个事件的类型,在 subscriptionByEventType 中找到所有监听了该事件的订阅者及处理事件的回调方法。...也就是说每个回调方法都有自己的优先级,执行线程和是否接收黏性事件,提高了事件分发的灵活程度,接下来我们在看核心功能的实现时更能体现这一点。...这里就能看到 poster 的调度事件功能,同时可以看到调度的单位细化成了 Subscription,即每一个方法都有自己的优先级和是否接收黏性事件。...我们记得在注册时,EventBus 会通过 SubscriberMethodFinder 来遍历注册对象的 Class 的所有方法,筛选出符合规则的方法,并作为订阅者在接收事件时执行的回调,我们直接来看看...所以在使用 EventBus 的模块,如果在回调上有环路,而且回调方法复杂到了一定程度的话,就要考虑把接收事件专门封装成一个子模块,同时考虑避免出现事件环路。 5.

1.4K70

Android 框架学习1:EventBus 3.0 的特点与如何使用

之前,有什么事件通信的方法: startActivityForResult() 发出请求 , onActivityResult() 接收回调 Activity 多层嵌套调用,多次 startActivityForResult...,可以在编译时获取信息,不需要在运行反射 事件执行线程多种选择 主线程 子线程 事件的继承 发送给订阅事件 A 的消息,也会发给订阅了 A 的子类的方法 简化事件 不需要在 Application...订阅方法执行在主线程 用于更新 UI 也要注意不执行耗时操作 BACKGROUND 订阅方法执行在单一的一个子线程 如果发送者不要主线程,那订阅方法就会执行在发送者线程 否则,使用一个单线程发送所有消息...,所有消息串行执行 也要注意避免耗时操作,影响到在同一线程的其他订阅方法 ASYNC 订阅方法会在一个新开的子线程(不是主线程、也不是发送者所在线程)执行(类似每次新建一个线程) 在执行耗时操作时需要使用这个...功能如图所示: 一个显示订阅方法接收信息的文字 一个点击后跳转到发送事件页面的按钮 两个用于注册和解除注册粘性事件的按钮 好,接着再看一下发送事件页面: public class EventBusPosterActivity

1.1K70

EventBus源码学习笔记(一)

每个长辈只能投相同面额的钱,晚辈只能获取相同面额的钱 假设小红,小明,小刚三个人是取10元钱的,现在张三放了10元钱, 然后主动把这10元钱给这三个人,不管他们去干嘛(与现实不同的是,张三只防了10元钱,但是小红,小明,小刚拿到了这...从订阅者角度来看,首先是要注册,没什么好说的,关键点就在于接受消息的处理方法上 - 添加一个注解,指定消息接收类型(即参数类型), 就可以接受这类消息 - 基于上面的方法,一个订阅者,可以实现订阅多个不同的消息源...事件监听者(Listeners) 即我们上面的订阅者,最终接受事件,并执行响应的业务逻辑的主体 在EventBus实例上调用EventBus.register(Object)方法注册事件监听者;需要注意的是请保证事件生产者和监听者共享相同的...事件生产者(Producers) 发送事件的主体,通过把事件传递给 EventBus.post(Object)方法。异步分发可以直接用EventBus子类AsyncEventBus。 3....;该方法应该用Subscribe注解 发布消息 通过事件总线向所有匹配的监听者提供事件

78750

EventBus简单入门总结

父类对于通知的监听和处理可以继承给子类,这对于简化代码至关重要;通知的优先级,能够保证 Subscriber 关注最重要的通知;粘滞事件(sticky events)能够保证通知不会因 Subscriber...,反注册EventBus,onEventMainThread用于接收订阅的事件 public class MainActivity extends Activity { private Button...EventBus.post函数实现,这个过程叫做事件的发布,观察者被告知事件发生叫做事件接收,是通过下面的订阅函数实现的。...onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件接收事件线程在同一个线程。...onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI

61540

Vue事件总线(EventBus)使用详细介绍

在Vue中可以使用 EventBus 来作为沟通桥梁的概念,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件接收事件,所以组件都可以上下平行地通知其他组件,但也就是太方便所以若使用不慎,就会造成难以维护的...$emit("aMsg", '来自A页面的消息'); } } }; 接下来,我们需要在 B页面 中接收这则消息。 三、接收事件 ? <!...大家知道vue是单页应用,如果你在某一个页面刷新了之后,与之相关的EventBus会被移除,这样就导致业务走不下去。.../event-bus.js' EventBus.$off('aMsg', {}) 你也可以使用 EventBus.$off('aMsg') 来移除应用内所有对此某个事件的监听。...或者直接调用 EventBus.$off() 来移除所有事件频道,不需要添加任何参数 。 上面就是 EventBus 的使用方法,是不是很简单。

1.8K20

【Flutter 专题】99 初识 EventBus

EventBus 初始化 和尚首先创建一个全局的 EventBus,通常每个应用只有一个事件总线,但如果需要多个事件总线的话可以在初始化时设置 sync = false; EventBus...EventBus 接收事件 对于 EventBus接收可以通过 on(event).listen() 来监听;其中若 on() 可以监听所有事件也可以监听固定的事件,区别是是否限制当前广播...; // 监听所有广播 eventBus.on().listen((event) { if (event is LanguageEvent) { print('EventBus --> LanguageEvent...EventBus 销毁 为了防止内存泄漏,一般在应用销毁时需要对 EventBus 进行销毁; eventBus.cancel(); eventBus.destroy();...和尚尝试了 EventBus 和 Provider 两种方式进行主题色切换,对于不同的场景可以自由选择;给和尚最直接的感觉是 EventBus 主要是事件分发,只发送/接收数据,更偏向于数据层,而 Provider

89341

Android面试之EventBus

简介 众所周知,EventBus 是一款用在 Android 开发中的发布/订阅事件总线框架,基于观察者模式,将事件接收者和发送者分开,简化了组件之间的通信操作,使用简单、效率高、体积小!...} 2,然后,在需要接收事件的地方订阅事件,可以选择注册事件订阅方法。...ThreadMode.MAIN_ORDERED,无论在那个线程发送事件先将事件入队列,然后通过 Handler 切换到主线程,依次处理事件。...注册事件订阅方法 使用EventBus时,需要在在需要接收事件的地方订阅事件,注册事件的方式如下: EventBus.getDefault().register(this); 点击打开getDefault...粘性事件 一般情况,我们使用 EventBus 都是准备好订阅事件的方法,然后注册事件,最后在发送事件,即要先有事件接收者。

49310

拆轮子系列之剖析EventBus源码

从FindState#checkAdd深入的一系列方法的作用: - 允许一个类有多个参数相同的订阅方法 - 子类继承并重写了父类的订阅方法,那么只会把子类的订阅方法添加到订阅者列表,父类的方法会忽略...,首先查看EventBus#unregister: public synchronized void unregister(Object subscriber) { //根据当前的订阅者来获取它所订阅的所有事件...那么为什么当注册订阅者的时候可以马上接收到匹配的事件呢?还记得上面的EventBus#subscribe方法里面有一段是专门处理粘性事件的代码吗?...//从列表中获取所有粘性事件,由于粘性事件的性质,我们不知道它对应哪些订阅者, //因此,要把所有粘性事件取出来,逐一遍历 Set<Map.Entry<Class...EventBus就充当了中介的角色,把事件的很多责任抽离出来,使得事件自身不需要实现任何东西,别的交给EventBus来操作就可以了。 参考博文链接1 参考博文链接2 参考博文链接3

32010

EventBus观察者模式

EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案。...这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式模型如下: ?...●  具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。...●  抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己,这个接口叫做更新接口。   ...Event的继承 如果Listener A监听Event A, 而Event A有一个子类Event B, 此时Listener A将同时接收Event A和B消息。

62910
领券