首页
学习
活动
专区
工具
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.2K70

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

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

    2.2K10

    浅谈web开发GetPost方法getpost区别

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

    1.8K20

    EventBus使用详解

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

    1.7K50

    EventBus3.0 使用及源码解析

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

    84480

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

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

    57700

    看看代码-EventBus

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

    56360

    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

    56830

    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-topicevent ---- Event广播Dispatcher Dispatcher主要作用是将EventBus postevent推送给每一个注册到topic上subscriber...除了从Registry获取对应Subscriber执行之外,我们还定义了几个静态内部类,其主要是实现了Executor接口EventContent接口。...有点类似于GOF设计模式监听者模式,但是EventBus提供功能更加强大,使用起来也更加灵活,EventBusSubscriber不需要继承任何类或者实现任何接口,在使用EventBus时只需要持有...在EventBus设计中有三个非常重要角色(Bus、RegistryDispatcher), Bus主要提供给外部使用操作方法, Registry注册表用来整理记录所有注册在EventBus

    21020

    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 方法,使其仍然在同一个线程执行,所以默认操作仍然是同步,这种处理方法也有适用地方,这样既可以解耦也可以让方法在同一个线程执行获取同线程便利

    7.7K10

    PHPPOSTGET区别

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

    1.7K50

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

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

    2.9K10

    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

    31020

    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,表示该事件能够接受粘性事件

    60920

    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.4K90
    领券