EventBus也称事件总线,根据发送事件的类型分为普通事件和粘性事件。

粘性事件的用法:

1.订阅的时候加上sticky = true

@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public fun onEvent() {}

2.post()改为postSticky()

EventBus.getDefault().postSticky(msgEvent)

粘性事件的原理:

事件发送时,接收方还不存在,在接收方注册的时候去处理该事件。

1.调用postSticky,会把粘性事件先保存下来

public void postSticky(Object event) {synchronized (stickyEvents) {//1.保存粘性时间stickyEvents.put(event.getClass(), event);}//2.如果已经注册了,就会马上响应,按普通事件处理post(event);
}

当EventBus注册时,根据注解判断当前方法是否是sticky,如果是的,获取粘性事件,直接调用该订阅方法。

public void register(Object subscriber) {//...subscribe(subscriber, subscriberMethod);
}private void subscribe(Object subscriber, SubscriberMethod subscriberMethod) {if (subscriberMethod.sticky) {if (eventInheritance) {Set<Map.Entry<Class<?>, Object>> entries = stickyEvents.entrySet();for (Map.Entry<Class<?>, Object> entry : entries) {Class<?> candidateEventType = entry.getKey();if (eventType.isAssignableFrom(candidateEventType)) {Object stickyEvent = entry.getValue();checkPostStickyEventToSubscription(newSubscription, stickyEvent);}}} else {Object stickyEvent = stickyEvents.get(eventType);checkPostStickyEventToSubscription(newSubscription, stickyEvent);}}
}

checkPostStickyEventToSubscription(newSubscription, stickyEvent)方法,最终会去post事件。

EventBus的粘性事件原理相关推荐

  1. android 粘性弹窗,android组件化通信之EventBus粘性事件解析

    背景 最近项目做组件化,需要进行组件化的通信,有时候可能会出现异步的情况,事件接收方还没准备好事件就已经发送过来了.这时候想到了EventBus的粘性事件.什么是粘性事件呢,通俗点讲就是不达目的不罢休 ...

  2. 事件总线框架EventBus的使用与原理解析

    文章目录 1. EventBus框架 1.1 EventBus简介 1.2 EventBus基本使用 1.2.1 添加Gradle依赖 1.2.2 定义事件 1.2.3 准备订阅者 1.2.4 发布事 ...

  3. Android Touch事件原理加实例分析

    Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...

  4. 【05】制作鸿蒙版蜻蜓短视频系统-事件原理及完成点击,长按,双击等操作实现跳转-优雅草伊凡

    大家好我是伊凡,这是第五篇现在已经开始加快进度了,本次开始熟悉点击事件和各类写法,下一步开始写底部导航和顶部导航,本文为伊凡原创撰写仅仅代表伊凡个人观点,不代表优雅草科技的观点与其立场,谢谢. 点击事 ...

  5. [Vue源码分析]自定义事件原理及事件总线的实现

    最近小组有个关于vue源码分析的分享会,提前准备一下- 前言: 我们都知道Vue中父组件可以通过 props 向下传数据给子组件:子组件可以通过向$emit触发一个事件,在父组件中执行回调函数,从而实 ...

  6. javascript自定义事件原理

    我们都知道,鼠标点击click,触屏的touch等事件,可以触发相应的事件处理程序,也可以为这些事件添加事件处理程序,实际开发过程中可供我们使用的事件很少,click.doubleclick,mous ...

  7. 浅谈Vue 自定义事件——原理及用法

    前言 在Vue 中,对HTML的原生事件做了支持.例如:click.focus.change等事件.除了原生事件外,Vue 还允许用户自定义事件. 什么是事件?什么是自定义事件? 在了解自定义事件前, ...

  8. Javascript常用API及事件原理相关笔记(一)

    1.定义Date日期对象的四种方式及对日期对象进行操作 <!DOCTYPE html> <html lang="en"> <head><m ...

  9. [实践篇]13.16 vmm_service监听qvm事件原理及其自定义事件详解

    [QNX Hypervisor 2.2用户手册]目录(完结) 前面通过[实践篇]13.11扒一扒qvm与vmm之间的那点事儿,我们了解到vmm_service通过监听vmm设备节点,来接收qvm的状态 ...

最新文章

  1. 2018年机器视觉前景预测
  2. 用麻酱+肉臊做成的面 —— 麻酱鲜虾面
  3. java 字符串写入word,JAVA 将字符串hollow 替换成word肿么实现?
  4. 数据中心网络性能:新应用下的新需求
  5. 磁盘上没有足够的空间完成此操作_【教程】Windows的磁盘分区,两分钟搞定!!...
  6. 尽可能地做到无服务器,但不止于此
  7. 简单介绍java Enumeration(转)
  8. UnityShader中的Queue
  9. 华为eNSP BUG——关于OSPF Router ID选择问题
  10. 你所不知道的 AI 进展
  11. 被称为最好最易理解的MATLAB入门教程
  12. 传智播客8月C/C++基础班开班
  13. NR 5G 无线接入网
  14. mysql分页合并同类项,人教版初三数学复习目录(全)
  15. ewebeditor 3.8php漏洞,asp eWebEditor v3.8 列目录漏洞
  16. 从RPA 向 IPA 转型升级!实在智能金秋发布会:重新定义流程自动化
  17. jmf608硬盘修复_JMF608固态硬盘主控 SSD套料 SSD电路板 SATA3 封装BGA152|TSOP48
  18. 第二章 Android内核和驱动程序(转)
  19. win10显卡相关配置
  20. Kabuki即将推出VR购物平台,或是低配版Buy+

热门文章

  1. 从风投看中国IT行业的发展
  2. 2022-2028年中国防臭袜行业投资分析及前景预测报告
  3. pip install nmslib 失败 (error: command ‘x86_64-linux-gnu-gcc‘ failed with exit status 1)
  4. 程序员如何讲清楚技术方案
  5. 【VS实践】如何在vs中自动添加注释
  6. MegEngine计算图、MatMul优化解析
  7. TensorFlow Keras API用法
  8. 如何为嵌入式应用选择适当的SSD
  9. 固件安全性—防止内存损坏和注入攻击
  10. 3D车道线检测:Gen-LaneNet