EventBus的粘性事件原理
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的粘性事件原理相关推荐
- android 粘性弹窗,android组件化通信之EventBus粘性事件解析
背景 最近项目做组件化,需要进行组件化的通信,有时候可能会出现异步的情况,事件接收方还没准备好事件就已经发送过来了.这时候想到了EventBus的粘性事件.什么是粘性事件呢,通俗点讲就是不达目的不罢休 ...
- 事件总线框架EventBus的使用与原理解析
文章目录 1. EventBus框架 1.1 EventBus简介 1.2 EventBus基本使用 1.2.1 添加Gradle依赖 1.2.2 定义事件 1.2.3 准备订阅者 1.2.4 发布事 ...
- Android Touch事件原理加实例分析
Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...
- 【05】制作鸿蒙版蜻蜓短视频系统-事件原理及完成点击,长按,双击等操作实现跳转-优雅草伊凡
大家好我是伊凡,这是第五篇现在已经开始加快进度了,本次开始熟悉点击事件和各类写法,下一步开始写底部导航和顶部导航,本文为伊凡原创撰写仅仅代表伊凡个人观点,不代表优雅草科技的观点与其立场,谢谢. 点击事 ...
- [Vue源码分析]自定义事件原理及事件总线的实现
最近小组有个关于vue源码分析的分享会,提前准备一下- 前言: 我们都知道Vue中父组件可以通过 props 向下传数据给子组件:子组件可以通过向$emit触发一个事件,在父组件中执行回调函数,从而实 ...
- javascript自定义事件原理
我们都知道,鼠标点击click,触屏的touch等事件,可以触发相应的事件处理程序,也可以为这些事件添加事件处理程序,实际开发过程中可供我们使用的事件很少,click.doubleclick,mous ...
- 浅谈Vue 自定义事件——原理及用法
前言 在Vue 中,对HTML的原生事件做了支持.例如:click.focus.change等事件.除了原生事件外,Vue 还允许用户自定义事件. 什么是事件?什么是自定义事件? 在了解自定义事件前, ...
- Javascript常用API及事件原理相关笔记(一)
1.定义Date日期对象的四种方式及对日期对象进行操作 <!DOCTYPE html> <html lang="en"> <head><m ...
- [实践篇]13.16 vmm_service监听qvm事件原理及其自定义事件详解
[QNX Hypervisor 2.2用户手册]目录(完结) 前面通过[实践篇]13.11扒一扒qvm与vmm之间的那点事儿,我们了解到vmm_service通过监听vmm设备节点,来接收qvm的状态 ...
最新文章
- 2018年机器视觉前景预测
- 用麻酱+肉臊做成的面 —— 麻酱鲜虾面
- java 字符串写入word,JAVA 将字符串hollow 替换成word肿么实现?
- 数据中心网络性能:新应用下的新需求
- 磁盘上没有足够的空间完成此操作_【教程】Windows的磁盘分区,两分钟搞定!!...
- 尽可能地做到无服务器,但不止于此
- 简单介绍java Enumeration(转)
- UnityShader中的Queue
- 华为eNSP BUG——关于OSPF Router ID选择问题
- 你所不知道的 AI 进展
- 被称为最好最易理解的MATLAB入门教程
- 传智播客8月C/C++基础班开班
- NR 5G 无线接入网
- mysql分页合并同类项,人教版初三数学复习目录(全)
- ewebeditor 3.8php漏洞,asp eWebEditor v3.8 列目录漏洞
- 从RPA 向 IPA 转型升级!实在智能金秋发布会:重新定义流程自动化
- jmf608硬盘修复_JMF608固态硬盘主控 SSD套料 SSD电路板 SATA3 封装BGA152|TSOP48
- 第二章 Android内核和驱动程序(转)
- win10显卡相关配置
- Kabuki即将推出VR购物平台,或是低配版Buy+
热门文章
- 从风投看中国IT行业的发展
- 2022-2028年中国防臭袜行业投资分析及前景预测报告
- pip install nmslib 失败 (error: command ‘x86_64-linux-gnu-gcc‘ failed with exit status 1)
- 程序员如何讲清楚技术方案
- 【VS实践】如何在vs中自动添加注释
- MegEngine计算图、MatMul优化解析
- TensorFlow Keras API用法
- 如何为嵌入式应用选择适当的SSD
- 固件安全性—防止内存损坏和注入攻击
- 3D车道线检测:Gen-LaneNet