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

同一片段中的EventBus post和subscribe

EventBus是一种事件总线机制,用于在应用程序的不同组件之间进行通信和解耦。它允许组件通过发布和订阅事件的方式进行交互,而不需要显式地引用彼此。

EventBus的基本概念是发布者(post)和订阅者(subscribe)。发布者负责发布事件,而订阅者负责订阅感兴趣的事件并执行相应的操作。当发布者发布一个事件时,所有订阅了该事件的订阅者都会接收到该事件,并执行相应的处理逻辑。

EventBus的分类:

  1. 本地EventBus:用于在同一个应用程序内的组件之间进行通信。
  2. 分布式EventBus:用于在不同应用程序或不同服务器之间进行通信。

EventBus的优势:

  1. 解耦:通过事件总线,组件之间不需要直接引用彼此,降低了耦合度,使得组件更加独立和可复用。
  2. 简化通信:通过发布和订阅模式,组件之间的通信变得简单明了,不需要显式地定义接口或回调函数。
  3. 提高性能:事件总线可以异步处理事件,提高系统的响应速度和吞吐量。
  4. 扩展性:通过事件总线,可以方便地添加新的组件或功能,而不需要修改现有的代码。

EventBus的应用场景:

  1. 消息传递:在分布式系统中,不同的服务之间可以通过事件总线进行消息传递,实现解耦和异步处理。
  2. 插件系统:通过事件总线,可以实现插件系统,让插件之间可以通过事件进行通信,扩展应用程序的功能。
  3. UI更新:在前端开发中,可以使用事件总线来更新UI组件,实现组件之间的通信和数据同步。

腾讯云相关产品:

腾讯云提供了Serverless Cloud Function(SCF)服务,可以与EventBridge(事件总线)结合使用,实现事件驱动的无服务器架构。SCF是一种事件驱动的计算服务,可以根据事件触发自动运行代码。EventBridge是一种事件路由和处理服务,可以将不同的事件源和事件目标进行关联。通过结合使用SCF和EventBridge,可以实现基于事件的无服务器架构,实现高效的事件驱动开发。

产品介绍链接地址:

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

相关·内容

EventBus线程分发

EventBus支持线程分发,在上一篇博客EventBus简介以及初步使用中,了解到EventBus的使用主要涉及事件发送者,以及事件订阅者;对于发送和订阅这两个行为,可以在不同的线程中,这就是EventBus...,订阅处理的线程和事件产生位于同一线程中。...如果post不是在主线程,那么事件处理会被直接在post线程中调用;如果post是主线程,EventBus使用了一个单一的background线程,那么所有主线程post的事件将会按照队列顺序进入,因此这要求事件处理尽可能快速返回...是主线程,background线程始终是同一个;post不是主线程,background与post相同,且事件处理是会阻塞post线程的。...ThreadMode.ASYNC 事件处理总是在一个单独的线程。总是与post线程和main线程独立。

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

    onMessage(MessageEvent event) { log(event.message); } EventBus 提供了四种 ThreadMode 值: POSTING 订阅方法将和发送者执行在同一线程...) 中优先级高的订阅者会先于低的接收到消息。...注意,只有在同一线程中的订阅者优先级才有作用。 有优先级后 ,高优先级的订阅者就可以取消消息往后的传播,这也符合生活和一些场景的需求。...这个页面很简单,两个发送普通事件和粘性事件的按钮。 运行效果 演示下普通事件的注册、解除注册、以及高优先级拦截事件的运行效果: ?...总结 这篇文章介绍了 EventBus 3.0 的主要特点和使用,可以发现,它的确很容易使用,目前能想到的事件通讯基本都可以满足,代码耦合也不严重。

    1.3K70

    EventBus原理解析笔记以及案例实战(结合demo)

    简化组件间的通讯方式 解耦合事件发送者和接收者 使活动、碎片和后台的线程实现更高的执行效率 防止复杂的有错误(倾向)的依赖以及生命周期的问题 让你的代码简洁 运行快 库小 EventBus主页简洁:...) 都在同一个线程中; 即,以上所说的PostThread线程类型中, 事件的发送 跟 事件的接收 是在同一个线程里面的; 下面注册一个onEvent(), 如果接收到Activity2..., 要等到3秒钟,主线程才会刷新UI(弹出Toast), 这样子在实际运用中用户体验很差; MainThread 其机制同onEvent()其实是差不多的, 即发送和接收都是在同一个线程 主线程...和MainThread 一次执行 当只有一个线程的时候, post(发送)和onEvent()是在同一个线程中去跑的, 一个线程里面的话, 宏观上来说,其代码便是一次执行的: ?...小结 PostThread:发送和接收在同一个线程; MainThread:发送和接收同在主线程; (应用范围上被PostThread包括) BackgroundThread PostThread

    2.2K10

    浅谈web开发中的Get和Post方法get和post的区别

    在http协议中,实际上有八个http方法。但在实际开发中,绝大多数情况我们只会用到两个方法,就是get和post。所以我们来稍微谈谈两种方法的区别,以及何时应该选取何种方法。...get和post的区别 post有一个体! 这个是关键。 ? Paste_Image.png ?...Paste_Image.png get和post都能发送参数,但是利用get的话,对参数数据量有限制,因为参数只能是放在请求行的内容中。而post由于在体中,则没有数据量的限制。...幂等就是只是简单的获取服务器上的信息,而不会对服务器上的内容进行改变,所以进行多次重复操作后,不会有预料不到的副作用。可以一遍一遍的反复做同一件事情而且不会出问题。这就是幂等的意义。...** get是幂等的,而post不是幂等的**

    1.8K20

    EventBus3.0 使用及源码解析

    以前传递对象可能通过接口、广播、文件等等,尤其像同一个Activity两个Fragment之间采用接口传递对象,十分的麻烦,而且耦合度较高。使用EventBus之后,这些将不再是问题。...最后在SecondActivity的主线程和子线程中分别调用Post()方法,注意,这里Post()方法的参数为Object类型,这也就意味着我们传递任何对象都是可以的,例如JavaBean、ListSubscribe注解还支持priority和sticky属性。priority设置接收者的优先级,默认值为0。...Post流程 EventBus#getDefault() 获取EventBus实例。和Register流程中一样,不再赘述。 EventBus#post() ?...EventBus#Post()也只做了三件事 1. 根据订阅事件在subscriptionsByEventType中查找相应的订阅者 2. 分发订阅者的订阅事件调用线程 2.

    87180

    三幅图给你弄懂EventBus核心原理

    第一幅图(订阅者和订阅事件) 先看一段在activity中注册和反注册EventBus的代码。...,注册监听的是activity,称为subscriber,在activity中监听了Event1和Event2两个事件,现在在另一个位置执行了一段代码: EventBus.getDefault().post...,获取其中带有@Subscribe标签的方法并且放在一个列表中,最后以注册对象为key,@Subscribe的方法列表作为value放在HashMap中,就是上图的形式。...第二幅图(订阅事件和订阅者) 这种表关系是event和subsciption的对应关系,比如在Android中多个activity可能会注册监听同一个event事件,所以在执行: image.png EventBus.getDefault...().post(new Event1()); 的时候所有注册监听了Event1的监听都会要会收到回调,看下subsciption的结构 image.png subsciption中包含,订阅的事件和订阅者本身

    60100

    EventBus使用详解

    在项目中存在很多Fragment和Fragment之间的信息交互,之前一直在用广播来实现但是广播使用起来较为麻烦且效率不高。...(5)解除注册( 类似于动态广播的解除注册) EventBus.getDefault().post(new MessageEvent()); 整体的流程就是这样,注意:事件处理函数的访问权限必须为...EventBus的县城模型一共有四种: POSTING(默认)  如果使用事件处理函数指定了线程模型为PostThread,那么该事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程...BACKGROUND事件模型也与发布事件在同一线程执行。ASYNC则在一个名叫pool-1-thread-1的新线程中执行。MAIN还是在UI线程中执行。...,当我们点击解除注册Unregist EventBus按钮的时候,再次点击Post Message也不会收到任何消息了。

    2.2K50

    Android消息传递之EventBus 3.0使用详解

    EventBus示例: 之前做图片社交App的时候,需要处理一个点赞数据的同步,比如在作品的详情页点赞 需要同时更新列表页该作品的点赞数量,这里还是以此为例。  ...(this);//解除订阅 1 EventBus.getDefault().unregister(this);//解除订阅 4.)发布事件 EventBus.getDefault().post(new...DataSynEvent()); 1 EventBus.getDefault().post(new DataSynEvent()); 5.)订阅事件处理 @Subscribe(threadMode...(TAG, "event---->" + event.getCount());    } ThreadMode总共四个: NAIN UI主线程 BACKGROUND 后台线程 POSTING 和发布者处在同一个线程...ASYNC 异步线程 6.)订阅事件的优先级 事件的优先级类似广播的优先级,优先级越高优先获得消息 @Subscribe(threadMode = ThreadMode.MAIN,priority

    57630

    看看代码-EventBus

    看看代码-EventBus EventBus是一个非常有名的Android开源项目,能非常方便地对应用内消息进行分发和处理,因近期在看消息通道相关的东西,就看了下代码学习一下,项目地址:EventBus...跟subscribe中,主要流程: EventBust.getDefault().register(Subscriber) r 找到Subscriber中所有需要接收消息的方法(SubscriberMethod...,使用不同的Poster,在对应的线程中对订阅方法进行反射调用,实现消息接收和处理 总结 EventBus通过对订阅者和发布者的解耦,简化了消息发送和注册的流程,且消息主体可以为任意类的对象,使得消息虽然在...EventBus中进行统一的分发和管理,但并不需要在同一地方集中注册和索引。...EventBus的代码量不多,算是一个比较轻量的框架,暂不支持跨进程的消息传递,且由于EventBus中维护的Subscriber引用都是强引用,没有及时unregister的话,可能会导致内存泄漏。

    56860

    JAVA | Guava EventBus 使用 发布订阅模式

    观察者模式在我们日常开发中使用非常广泛,例如在订单系统中,订单状态或者物流信息的变更会向用户发送APP推送、短信、通知卖家、买家等等;审批系统中,审批单的流程流转会通知发起审批用户、审批的领导等等。...类进行操作,其提供了 register、unregister、post 来进行注册订阅、取消订阅和发布消息 public void register(Object object); public void...创建一个订阅者 在 Guava EventBus 中,是根据参数类型进行订阅,每个订阅的方法只能由一个参数,同时需要使用 @Subscribe 标识 class EventListener { /...(1); eventBus.post(2); eventBus.post("3"); 运行结果为 EventListener#listenInteger ->1 EventListener#listenInteger...(),其具体实现中直接调用的 Runnable#run 方法,使其仍然在同一个线程中执行,所以默认操作仍然是同步的,这种处理方法也有适用的地方,这样既可以解耦也可以让方法在同一个线程中执行获取同线程中的便利

    8.2K10

    google Guava之EventBus

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现,在应用中可以处理一些异步任务。...对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 ?...the int event."); eventBus.post(1000); } } 结论:注册了一个Listener,使用eventBus发送消息它的父类的Subscribe...Subscriber 不同类型参数的Subscribe 本小节我们来测试一下,向EventBus发送消息后,当有多个不同类型的Subscribe时,它们是怎么进行通信的呢?...DeadEvent 当EventBus发布了一个事件,但是注册的订阅者中没有找到处理该事件的方法,那么EventBus就会把该事件包装成一个DeadEvent事件来重新发布;我们在应用中可以提供如下的事件处理方法来处理

    1.3K20

    并发编程 - Event Bus 设计模式

    topic),同一个Subscriber的不同方法通过@Subscribe注解之后可接受来自两个不同的topic消息,比如 /** *非常普通的对象 */ public class SimpleObject...和test-topic的event ---- Event广播Dispatcher Dispatcher的主要作用是将EventBus post的event推送给每一个注册到topic上的subscriber...除了从Registry中获取对应的Subscriber执行之外,我们还定义了几个静态内部类,其主要是实现了Executor接口和EventContent接口。...有点类似于GOF设计模式中的监听者模式,但是EventBus提供的功能更加强大,使用起来也更加灵活,EventBus中的Subscriber不需要继承任何类或者实现任何接口,在使用EventBus时只需要持有...在EventBus的设计中有三个非常重要的角色(Bus、Registry和Dispatcher), Bus主要提供给外部使用的操作方法, Registry注册表用来整理记录所有注册在EventBus上的

    22520

    Guava中的异步事件处理方案很优雅!

    点击上方“码农沉思录”,选择“设为星标” 优质文章,及时送达 简述 EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现,在应用中可以处理一些异步任务...对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 ?...the int event."); eventBus.post(1000); } } 结论:注册了一个Listener,使用eventBus发送消息它的父类的Subscribe...不同类型参数的Subscribe 本小节我们来测试一下,向EventBus发送消息后,当有多个不同类型的Subscribe时,它们是怎么进行通信的呢?...DeadEvent 当EventBus发布了一个事件,但是注册的订阅者中没有找到处理该事件的方法,那么EventBus就会把该事件包装成一个DeadEvent事件来重新发布;我们在应用中可以提供如下的事件处理方法来处理

    2.9K10

    PHP中POST和GET的区别

    HTML5学堂:在JavaScript当中,存在“get和post方法的区别”这一辨析知识。其实get和post是向服务器端请求/提交数据的两种方式。...$_POST和$_GET有何作用 PHP中有$_POST和$_GET两个超级全局变量,两个都可以用作向服务器发送请求,但是这两者有一些区别。...来整体总结一下: POST:用于向服务器发送数据,从而以某种方式导致服务器上状态的改变,如在数据库中插入数据。数据还可以在响应中返回。...不同于GET,POST请求只能通过WEB表单的动作完成,另外,POST当中发送的数据是隐藏不可见的。 GET:一般用于数据的获取,而不会使服务器有任何改变。...对于少量的数据,GET非常有用,可以直接在URL中向服务器发送数据。与POST的另一个不同之处在于GET适用于发送少量的数据。

    1.7K50

    Android消息传递之EventBus 3.0使用详解

    EventBus示例: 之前做图片社交App的时候,需要处理一个点赞数据的同步,比如在作品的详情页点赞 需要同时更新列表页该作品的点赞数量,这里还是以此为例。  ...().post(new DataSynEvent()); 5.)订阅事件处理 @Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行 public...Log.e(TAG, "event---->" + event.getCount()); } ThreadMode总共四个: NAIN UI主线程 BACKGROUND 后台线程 POSTING 和发布者处在同一个线程...ASYNC 异步线程 6.)订阅事件的优先级 事件的优先级类似广播的优先级,优先级越高优先获得消息 @Subscribe(threadMode = ThreadMode.MAIN,priority =...-keepattributes *Annotation* -keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe <methods

    35520

    EventBus轻松使用

    ,所有注册过事件的类都能收到消息,参数为object类型,在事件处理函数中强制转换 EventBus.getDefault().post("你好");   4.事件处理函数,在注册过EventBus的类中用该函数处理...post传递的数据。...函数名可为任意的,只需用注解声明(仅限于EventBus3.0,3.0开始支持注解,之前的版本函数为固定的几个函数),下面解释threadMode参数 @Subscribe(threadMode = ThreadMode.MAIN...POSTING(默认):如果使用事件处理函数指定了线程模型为POSTING,那么该事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程。...;   2.注册Eventbus,和之前一样 EventBus.getDefault().register(this);   3.处理消息,注意在注解参数中声明:sticky:true,表示该事件能够接受粘性事件

    61820

    Guava - EventBus(事件总线)

    Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计。...首先Guava为我们提供了同步事件EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的,官方理由是并不想我们我们的使用方式。...订阅 首先EventBus为我们提供了register方法来订阅事件,Guava在这里的实现很友好,我们不需要实现任何的额外接口或者base类,只需要在订阅方法上标注上@Subscribe和保证只有一个输入参数的方法就可以搞定...正在这里对于Guava对于事件的发布,是依据上例中订阅方法的方法参数类型决定的,换而言之就是post传入的类型和其基类类型可以收到此事件。...DeadEvent DeadEvent暂时不清楚怎么翻译更合意,它描述的是死亡事件,即没有没任何订阅者关心,没有被处理,以DeadEvent类型参数的方法表示.例如在上例中我们post一个Object类型

    1.4K20

    Greenrobot-EventBus源码学习(四)

    EventBus 深入学习四之实例&类说明 本篇开始,则转向greenrobot/EventBus, 之前基本上将Guava中设计的思路捋了一遍,逻辑比较简单和清晰,接下来则看下广泛运用于android...EventBus对象的获取,down下来的工程中,有一个基础的测试类,给我们演示了不少的使用方式 @RunWith(AndroidJUnit4.class) public class EventBusBasicTest...,对于EventBus而言,把这个放开的一个关键点是再你选的系统中,不会限制你的EventBus实例个数,也就是说,你的系统可以有多个并行的消息-事务总线 3....Subscription 注册回调信息封装类 EventBus中维护的订阅关系, 在对象注册时注入到 EventBus, 推送消息时,则会从EventBus 中获取 EventBus 中维护的订阅者关系数据结构就是...SubscriberMethodFinder 辅助工具类,获取订阅者中的回调方法 顾名思义,这个就是用来获取订阅者类中的所有注册方法的,支持两种方式,一个是上面的注解方式;还有一个则是利用SubscriberInfo

    1.5K90
    领券