EventBus - 4 源码解析-2 subscribe注解/threadMode

@Subscribe@AllowConcurrentEvents解析这两个注解 Subscribe:标记方法为事件订阅者,是事件处理的“入口”。:允许订阅方法并发执行,是对事件处理“执行方式”的优化(需保证线程安全)。两者共同作用于 EventBus 的事件订阅机制,帮助开发者实现低耦合的组件通信,尤其适合复杂系统中分散组件的协作场景。 阅读详情

接下来看下@Subscribe的源码,

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Subscribe {
    ThreadMode threadMode() default ThreadMode.POSTING;

    /**
     * If true, delivers the most recent sticky event (posted with
     * {@link EventBus#postSticky(Object)}) to this subscriber (if event available).
     */
    boolean sticky() default false;

    /** Subscriber priority to influence the order of event delivery.
     * Within the same delivery thread ({@link ThreadMode}), higher priority subscribers will receive events before
     * others with a lower priority. The default priority is 0. Note: the priority does *NOT* affect the order of
     * delivery among subscribers with different {@link ThreadMode}s! */
    int priority() default 0;
}

19行,线程模式。以下是ThreadMode的源码,

public enum ThreadMode {
    POSTING,
    MAIN,
    MAIN_ORDERED,
    BACKGROUND,
    ASYNC
    private ThreadMode(){ }
}

它是一个枚举类,
POSTING:默认的线程模式,表示在执行post事件操作的时候,线程它会直接调用订阅者的事件方法,这时不管该线程是否在主线程,还有一点需要注意的是,在主线程当中,你肯定不能做耗时操作。
MAIN:表示在主线程执行这个方法,当我们发布线程如果就在主线程当中,那么我们就可以直接调用订阅者的事件方法来处理,否则的话,我们需要通过我们前面所说的HandlerPoster来进行发送消息,来进行相应的Handler Message的处理。
BACKGROUND:表示在后台线程中执行相应的方法,如果发布线程不是在主线程中,那么你直接调用订阅者的事件处理函数肯定是不可以的,你一定要去启用我们唯一的后台线程去进行处理。后台线程由于是唯一的,所以说当事件发送的post超过一个的时候,它们会放在后台线程中去进行依次的处理。同时BACKGROUND也是利用BackgroundPoster来进行调度的。
ASYNC:不论发布线程是否在主线程,都会使用一个空线程进行处理。和BACKGROUND不同的是,ASYNC所有的线程都是相互独立的,它不会出现线程卡顿,

AsyncPoster 每次从线程队列中获取一个所说的pendingPost。
BackgroundPoster 它会把所有的队列全部取出来进行处理。
这也是两者的缺点和优势。


21行,表示是否有粘性事件。
粘性事件:事件消费者在事件发布之后才注册的也能接收到该事件的特殊类型。
粘性广播:Sticky Broadcast,在广播发送结束后会保存刚刚发送的广播。

AndroidEventBus会存储所有的Sticky事件。如果在某个事件不需要的时候,我们就会进行手动的移除。

23行,方法优先级,默认是0。



【Stata双重差分模型】双重差分DID的具体操作步骤 本案例将详细阐述如何使用双重差分法进行实证分析,并展示具体的STATA操作代码。 阅读详情

相关推荐

周志华《机器学习》课程系列笔记——目录导航页

最近自学机器学习课程,注意到了南京大学周志华老师的课程。我是在学堂在线平台观看的,注意到b站上也有相应视频,但b站上并未获得授权,随时有消失的可能。周志华老师的网络教学视频中,与其西瓜书相比确实少了一些内容。但幸运的是,缺失的内容实际上对于初学者来说并不会产生太大影响。目前这一笔记也遵循视频内容,相比西瓜书中也会有一些缺失,敬请谅解。可能以后如果有机会和时间,我会再阅读周志华老师的书籍将缺失内容补全。一切内容敬请关注我的个人Page页面。

Sinocifengs的博客 1688

EventBus3.0源码解析——01.使用方法、@Subscribe

使用方法 //注册事件 EventBus.getDefault().register(Object subscriber); //注销事件 EventBus.getDefault().unregister(Object subscriber); //发送 EventBus.getDefault().post(Object event); //接收 //这里的方法名不是关键所在,关键是发送的O...

boolean的博客 4028

竞赛无人机模块化开发实战:2023 TI电赛G题空地协同消防系统(飞控与视觉融合篇)

本文以2023年TI电赛G题为例,详细阐述了采用模块化开发思维构建空地协同智能消防系统的实战方法。文章重点拆解了无人机飞控二次开发、视觉识别与融合控制等核心模块,提供了硬件选型、代码实现与系统联调的完整指南,旨在帮助参赛者通过“搭积木”式编程高效完成复杂系统集成。

js777的博客 455

设计模式-观察者模式eventBus(下)

1、实现方式类型: 同步阻塞是最经典的实现方式,主要是为了代码解耦;异步非阻塞除了能实现代码解耦之外,还能提高代码的执行效率;进程间的观察者模式解耦更加彻底,一般是基于消息队列来实现,用来实现不同进程间的被观察者和观察者之间的交互。 2、异步非阻塞观察者模式的简易实现: 其中一种是:在每个 regSuccess() 函数中创建一个新的线程执行代码逻辑;另一种是:在 UserController 的 register() 函数中使用线程池来执行每个观察者的 handleRe...

Java开发者Peng博客 1258

ODBC 连接数据库 SQL server 2008

1、打开【控制面板】-> 【系统和安全】 -> 【管理工具】-> 【数据源(ODBC)】  2、双击【数据源(ODBC)】-> 选中【系统DSN】 3、单击【添加】,会弹出如下对话框,选中【SQL server】->【完成】 4、弹出如下对话框,在【名称】中填入数据源名称 例如:我命名为: LocalServer,在【服务器】中填入计算机名或者IP地址,我连接

Christine的专栏 8518

python零基础入门到精通,python入门到精通教程

坚持到了这儿,恭喜你,表示你有做开发的潜力,其实我想说的上面的内容还是刚刚开始,刚开始大家不需要多么精通了解这些内容,除了Python方面的知识,每个部分掌握一点儿能进行基本开发就好,主要是不断练习,让自己跳出「舒适区」,进入「学习区」,但是又不进入「恐慌区」,不断给自己「喂招」。上述这份完整版的Python全套学习资料已经上传优快云官方,朋友们如果需要可以扫描下方二维码免费获取【保证100%免费】

YYmmsss的博客 3455

EventBus

自用,简单记录 依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1-jre</version> </dependency> 一. 订阅者Subscriber

Mr_moving 1194

44位abogus补环境与纯算逆向分析

44位ab参数补环境与纯算加密流程逆向分析

吴秋霖的博客 2787

JAVA进阶——注解

文章目录 目录 文章目录 前言 一、注解是什么? 1.1注释和注解的区别 二、注解的使用 2.1 如何声明一个注解 2.1.1 元注解 2.1.2 @Target注解 2.1.3 @Retention注解 2.1.4 给注解添加参数 三、注解处理器 3.1 创建自己的注解处理器 3.2 注册注解处理器 3.2.2 自动注册注解处理器 3.3 使用注解处理器 总结 前言 JAVA中的注解我们每个人都用过,通常是以@开头,最常见的就是@Ovrride注解。那么注解到...

bugmaker的博客 878

华为od 面试八股文_Python_02_含答案

华为od 面试八股文_Python_02_含答案

MISAYAONE的博客 4535

自私兽群优化器(SHO)详解:从生物本能到智能优化

自私兽群优化器(SHO)是一种受动物群体自私行为启发的智能优化算法。该算法模拟动物在捕食威胁下的两种行为:聚集行为(全局搜索)和自私行为(局部搜索),将优化问题的解空间映射为生存环境,候选解视为猎物个体。SHO通过安全性评估将猎物分为安全、危险和高危三类,分别采用不同的位置更新策略,并引入捕食者角色增加选择压力。相比传统优化算法,SHO具有无需梯度信息、自适应平衡探索与开发、参数简单等优势,特别适合高维复杂和多模态优化问题。算法通过马尔可夫链理论保证收敛性,已在工程设计和数据挖掘等领域展现出良好性能。

qq_42212808的博客 197

Android EventBus 的使用介绍与原理

EventBus 的使用介绍与原理

OuO-1 的博客 303

DeepSeek掘金——用DeepSeek模型构建AI 代理

在本综合指南中,我们将探讨如何利用 DeepSeek 的功能构建能够以有意义的方式理解、推理和交互的复杂 AI 代理。人工智能领域正在迅速发展,DeepSeek 的模型代表了智能 AI 代理开发的重大进步。在本综合指南中,我们将探讨如何利用 DeepSeek 的功能构建能够以有意义的方式理解、推理和交互的复杂 AI 代理。

3862

EventBus使用和源码详解

目录 1. 架构图 2. 使用 3. 源码解析 3.1 @Subscribe注解 3.1.1 threadMode: 配置消息接收是在哪个线程 3.1.2 sticky : 粘性事件 3.1.3 priority : 接收事件的优先级 3.2 注解解析 3.2.1 注解类上的元注解 3.2.2 collectSubscribers收集订阅类和订阅的方法信息 3.2.3 生...

文韬武略的专栏 866

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

EventBus框架源码解析

EventBus 源码解析一. 简介二.使用2.1 gradle依赖2.2 定义事件2.3 注册、解绑事件2.4 处理事件2.5 发送事件三.源码解析3.1 注册订阅过程3.1.1 创建EventBus 对象3.1.2 注册成为订阅者3.2 取消订阅过程 一. 简介 EventBus是适用于Android和Java的开源库,使用发布者/订阅者模式进行松散耦合。EventBus使中央通信只需几...

qq_30658457的博客 295

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

EventBus基本使用与源码解析

一 解析EventBus EventBus是一款针对Android优化的发布-订阅事件总线。它简化了应用程序内各组件间、组件与后台线程间的通信。其优点是开销小,代码更优雅,以及将发送者和接收者解耦。当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越困难。所以为了解决这个问题,EventBus应运而生! 1.1 EventBus概述 在讲到 EventBus 的基本用法之前,我们需要了解 EventBus 的三要素以及它的 4 种Th...

lixiong0713的博客 2万+

手写简易版EventBus实现方案-源码学习1

1.Subscribe注解,这里没什么好解释的,添加一个Subscribe注解,在接受Event的方法上使用。 /** * @Target 该注解的使用范围,当前为方法注解 * @Retention 该注解作用在运行时状态 * 注解内容为threadMode */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIM...

进击的棉花手的博客 253

EventBus:基本使用详解

简介 EventBus项目:https://github.com/greenrobot/EventBus EventBus 3.0.0 API:http://greenrobot.org/files/eventbus/javadoc/3.0/ EventBus是一种用于Android/Java的事件发布-订阅总线框架。 特点: 简化组件之间的通信 分离事件发送者和接收者 很好地处理A...

尘埃zza的博客 2277

【EventBus】Subscribe 注解分析 ( Subscribe 注解属性 | threadMode 线程模型 | POSTING | MAIN | MAIN_ORDERED | ASYNC)

一、Subscribe 注解属性、 二、threadMode 线程模式 ( POSTING | MAIN | MAIN_ORDERED | BACKGROUND | ASYNC )、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 6753

Android事件总线框架Otto源码解析一(Bus的构造过程及在使用注解@Subscribe时的注册过程)

说明:本文的解析过程并不只是简单的讲解框架中各个方法的调用逻辑、程序的执行过程,而是依赖于示例代码,结合了具体的的示例程序的执行流程,有助于更好的理解。 有关Otto的使用方法参见另一篇文章: Android事件总线框架Otto使用介绍 package com.example.myotto; import android.content.Context; import android.c...

WindfallSheng的博客 3493

注解的自我理解

目录 什么是注解? 注解使用场景? 注解如何使用? 主流框架的注解分析 参考文章 1. 什么是注解? 注解是在JDK1.5引入的,官方文档中的解释为元数据,就是一个解释数据的数据。在源代码中对代码进行解释的数据。很多人把他来理解为标签,见名知其意思。下面通过一个常见的代码注解: @Override public String toString() { // T...

m0_37813273的博客 619

EventBus系列:模仿EventBus,自定义注解

找到带有@Subscribe注解的方法,并且调用。

知道这个有什么用? 577

java subscribe_java-使用Spring @SubscribeMapping获取当前用户

我在严重依赖WebSocket进行数据交换的Spring Boot应用程序中使用@SubscribeMapping.该应用程序由Spring Security保护.客户端,我在WebSocket上使用Stomp:this.socket = new WebSocket(this.socketUrl);this.stompClient = Stomp.over(this.socket);this.st...

weixin_29355377的博客 1473

EventBus源码赏析一 —— 基本使用

EventBus简介 EventBus是一种用于Android的发布/订阅事件总线。我们经常用来在不同界面,不同线程传递数据,它解耦了事件发送方和事件处理方。 虽然Android本身提供了LocalBroadcastReceiver类可以实现类似的功能,但是LocalBroadcastReceiver使用起来稍微繁琐,而且传递数据大小也受intent限制。 EventBus角色 EventBus主要有一下三个角色: Event 事件,可以是任意引用类型,不能是基础数据类型如int,char。他是Event

Android23333的博客 1700

EventBus 3.0的用法详解

什么是EventBus EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。 EventBus框架 大家谈到EventBus,总

Dream It Possible 1万+

EventBus原理解析

EventBus原理解析 一、概述 EventBus我们都知道是用来做app内部的数据通信的,可以达到很好的解耦合效果,传统的的广播或则回调方式存在着代码耦合度高,代码杂乱,不宜维护的特点,EventBus使用的是订阅者/发布者模式,代码简洁,高度解耦,这个是这个框架产品的背景原因了 二、整体架构 这个是官方框架的图,这个图描述的结构很清晰 Subscriber:这个是订阅者,订阅某个类型的消息比如onMessage(String src) 这个就订阅了接受src的消息,当然代码中还要写入@Subscrb

诺~~~ 1343

Android学习笔记之EventBus

EventBus 文章目录EventBus1、什么是EventBus?2、什么是发布-订阅模型?3、EventBus的使用4、发布事件5、@Subscribe 1、什么是EventBus? ​ EventBus,中文翻译事件总线,是greenrobot开发的基于发布-订阅模型的开源框架。可以理解为,将一个个的event事件发送到bus总线上,然后eventbus会根据订阅者已匹配的事件,然后把事件发送给对应的订阅者。我们在activity之间通信的时候,可以使用intent或者handler的方式进行通信

mrkyee的博客 796
上一篇: EventBus - 3 源码解析-1:EventBus对象构建/如何进行线程调度(整理中)
下一篇: EventBus - 5 源码解析-3:register订阅(上)
资源星图
博客等级 码龄15年 49粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值