greenrobot EventBus开源库-使用

从零玩转GD32单片机CAN总线:手把手实战配置与源码解析 本文提供了一份基于GD32单片机的CAN总线实战入门指南。从硬件连接(GD32F103C8T6与TJA1050收发器)到软件配置,详细解析了CAN初始化、波特率计算、过滤器设置及中断收发等核心源码。通过手把手的回环测试示例与常见问题排查,帮助开发者快速掌握CAN总线通信的关键配置与调试技巧。 阅读详情
  • 概述

    greenrobot的EventBus是一个非常流行的开源库
    EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
    源码:https://github.com/greenrobot/EventBus

  • 官方:EventBus is a publish/subscribe event bus optimized for Android.
    这里写图片描述

EventBus 主要分四种事件
1、onEvent
2、onEventMainThread
3、onEventBackgroundThread
4、onEventAsync


  • onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。

  • onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。

  • onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
  • onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.

Demo
EventBus 使用起来很简单,主要4个步骤:注册->发布订阅->接收订阅事件->注销
1;注册
EventBus.getDefault().register(this);
2:发布
EventBus.getDefault().post(new FirstEvent ( “android” ));
3:接收 (四种事件根据需求进行接收)
public void onEventMainThread(FirstEvent event) {}
4: 注销
EventBus.getDefault().unregister(this);

具体代码:

public class MainActivity extends Activity {

    Button btn;
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EventBus.getDefault().register(this);

        btn = (Button) findViewById(R.id.btn_click);
        tv = (TextView)findViewById(R.id.tvShow);

        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent( MainActivity.this
                        SecondActivity.class);
                startActivity(intent);
            }
        });
    }

    public void onEventMainThread(FirstEvent event) {
        String msg = "onEventMainThread收到了消息:" + event.getMsg();
        Log.d("harvic", msg);
        tv.setText(msg);
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onDestroy(){
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}

SecondActivity:

public class SecondActivity extends Activity {
    private Button btn_FirstEvent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        btn_FirstEvent = (Button) findViewById(R.id.btn_first_event);

        btn_FirstEvent.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                EventBus.getDefault().post(
                        new FirstEvent("FirstEvent btn clicked"));
            }
        });
    }
}

注意:

EventBus.getDefault().post(
new FirstEvent(“FirstEvent btn clicked”));

发布事件:FirstEvent是自己定义的一个类
public class FirstEvent {

private String mMsg;
public FirstEvent(String msg) {
      // TODO Auto-generated constructor stub
      mMsg = msg;
}
public String getMsg(){
      return mMsg ;
}

}

接收订阅事件也要对应的匹配参数
public void onEventMainThread(FirstEvent event)

Python 控制 Keysight N9010B/N9020/N9030 频谱仪 为什么要实现频谱仪的控制呢?起因是因为我司RF的同事们需要对通信模块进行GSM的带内杂散进行测试,由于该测试的频点涉及900多个,所以急需开发一款自动化测试工具。该工具需同时实现对无线通讯仪和频谱仪的控制,这篇文章主要介绍一下频谱仪的控制!做通信的应该对频谱仪都不陌生,不过我之前做的都是软件相关行业,所以我对频谱仪其实还是很陌生的;不过好在我的同时们都很热心,加上仪器的文档,一段时间下来,也算是熟悉了一些。 阅读详情

相关推荐

单总线协议(1—Wire bus)【DS2431】

1—Wire 协议定义了复位脉冲、 应答脉冲、写0、写1、读0和读1时序等几种信号类型。所有的单总线命令序列(初始化ROM 命令功能命令)都是由这些基本的信号类型组成的。识别单总线器件(ROM 命令)单总线器件交换数据(功能命令)初始化单总线器件(初始化)

qq_41883039的博客 1147

【Android开发】greenrobot三大开源利器详解(一)——EventBus

一、greenrobot介绍greenrobot相关信息较少,可以确信是一个开源组织。官网:http://greenrobot.org/。 greenrobot主要开发并维护了3个Android开源库,即greenDAO、EventBus、和Essentials。三个开源库都可以在GitHub上进行下载。本节讲解其中最著名的EventBus。二、EventBus概述EventBus的官方解释是:“

BrilliantEagle的专栏 1万+

最优化问题——一维搜索(一)

最优化问题——一维搜索 1. 一维搜索的引入 1.1 从非线性规划问题到一维搜索 在前面的文章中,我们提到了基于迭代的非线性规划问题的求解思路。在求解过程中,我们提到了在每一步的迭代中都需要对计算步长因子,其计算公式为: λk=minλf(xk+λp)λ_k=min_{λ}f(x_k+λp)λk​=minλ​f(xk​+λp) 我们将f(xk+λp)f(x_k+λp)f(xk​+λp)视为λ的一元函数,我们的目标就是求这个一元函数的极小值。对于这个问题,我通常的求解方式为一维搜索。 1.2 一维搜索的基本形

hei653779919的博客 7361

greenrobot/EventBus3.0使用及源码分析

简介 EventBus通过更少的代码和更高的质量为Android和Java提供的事件总线简化了活动,片段,线程,服务等之间的通信 正如EventBus website官网形容的那样: (1)简化组件间的通信 (2)解耦事件发送器和接收器 (3)使用UI工件(例如活动、片段)和后台线程执行良好的操作 (4)避免复杂且容易出错的依赖关系和生命周期问题 (5)快;专门针对高性能进行优化 ...

A771642的博客 3024

cutlass2.x源码解读之PitchLinearStripminedThreadMap

TensorCoord:使用layout::PitchLinearCoord作为张量坐标。Shape:使用模板参数Shape_作为tile的形状,kThreads:线程总数,定义为模板参数Threads。kElementsPerAccess:每次访问的元素数,定义为模板参数ElementsPerAccess。ThreadAccessShape:线程访问的形状,使用layout::PitchLinearShape定义。内部实现细节:ShapeVec。

jiangjkd的专栏 789

AI 体验走查 - 火山引擎存储的 AI UX 探索之路

火山引擎存储技术团队驱动 AI 自主完成用户体验走查 / 可用性测试的执行与评价,帮助业务改善交互体验。 立项“故事走查”的背景诉求和 AI 机遇 如何搭建“AI 评价”能力,精准识别交互问题 让交互体验故事走查变为技术产品,讲解系统设计,包括流程、User Story 维护、框架和 AI 模型选型、Midscene.js 的集成技巧等

bytedanceospo的博客 2834

[开发|java] greenrobot.eventbus的ThreadMode说明

事件处理在后台线程上执行。如果事件发布的线程是主线程,会创建一个新的后台线程执行事件处理方法;如果事件发布的线程已经是后台线程,则直接在该后台线程上执行事件处理方法。如果事件发布的线程不是主线程,事件处理方法会通过主线程的消息队列进行调度,保证在主线程上执行。:事件处理在单独的线程池中执行。无论事件发布的线程是主线程还是后台线程,事件处理方法都会在单独的线程池中执行。即事件发布的线程会立即调用事件处理方法,不会开启新的线程。,可以根据事件的处理逻辑和需求来控制事件的执行线程,以达到最佳的性能和响应效果。

梦醒贰零壹柒 843

华为Watch的ECG功能技术分析

华为Watch的ECG(心电图)功能通过硬件传感器、算法优化和医疗认证的结合,实现了对心脏电活动的监测和房颤(AFib)等心律失常的预警。采用医疗级ECG模拟前端芯片(AFE),如TI(德州仪器)的ADS1292R等,支持低噪声、高采样率(通常≥200Hz)。结合PPG(光学心率)数据交叉验证,提高检测可靠性(如ECG和PPG心率不一致时触发警告)。通过RR间期变异性判断心律是否规则,识别房颤(AFib)的典型特征(如不规则不规则心律)。结合加速度计数据,识别手臂运动导致的信号失真,动态调整算法参数。

xu_wenming的博客 6443

EventBus详解 (详解 + 原理)

EventBus简介EventBus是一个开源库,由GreenRobot开发而来,是用于Android开发的 “事件发布—订阅总线”,用来进行模块间通信、解藕。它可以使用很少的代码,来实现多组件之间的通信。Android系统中的事件通信则是 handler (消息机制) 和 BroadCastReceiver (广播机制),通过它们可以实现组件之间的事件通讯。缺点在于,代码量多、组件之易产生藕合引用。EventBus产生的背景。

m0_49508485的博客 4万+

小米汽车车载多摄像头视频链路深度解析 | MAX96792/MAX96724/MAX96781 实战分享

通过合理的输入输出规划 + 虚拟通道管理 + 加串行策略,可以在成本和性能之间取得最佳平衡,这就是多摄像头系统设计的核心精髓。

weixin_43199439的博客 1547

YOLO26 魔术师专栏|全网独家首发!2026 原创级创新赋能 CV 全场景

基于 YOLO26 核心架构迭代,融合原创自研、2026 AAAI/CVPR/ICCV 顶会前沿成果,打造更高效、更灵活、更具创新性的计算机视觉解决方案!

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4367

探索高效广告管理新境界:GreenRobot 开源广告服务器

探索高效广告管理新境界:GreenRobot 开源广告服务器 在数字营销的世界里,精准投放与最大化收益是每个开发者和网站所有者的共同追求。今天,我们向您隆重推荐一款强大的工具——GreenRobot 开源广告服务器,它将为您的广告管理带来革命性的变化。 项目介绍 GreenRobot Open-source Adserver 是一个智能的广告旋转系统,专为桌面站点、移动网页及原生移动应用设计。通过...

gitblog_00048的博客 744

Isaac Sim/Lab & ROS2 入门教程 —— 宇树人形机器人 H1 强化学习策略部署

本文介绍了如何通过ROS2和IsaacSim运行H1人形机器人的强化学习运动策略。主要内容包括:1)设置机器人关节配置和初始位置;2)添加IMU传感器;3)配置ROS2节点以发布观测数据和接收动作指令;4)创建模拟环境并发布ROS时钟;5)最终运行ROS2策略实现对机器人的键盘控制。文中详细说明了关节参数设置、传感器配置、ROS2节点创建等关键步骤,并提供了注意事项和验证方法。完成配置后,用户可通过键盘指令控制机器人在平坦地形上的运动。

2506_90492529的博客 2170

Gradle 使用第三方库总结

JakeWharton/butterknife compile 'com.jakewharton:butterknife:7.0.1' greenrobot/EventBus compile 'de.greenrobot:eventbus:2.4.0' mcxiaoke/android-volley compile 'com.mcxiaoke.volley:library:1.0.18...

weixin_30644369的博客 99

Statistics and Machine Learning Toolbox

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

AndroidEventBus-注解版

解惑 AndroidEventBus:区别于greenrobot的EventBus,是由国内大神进行写类似EventBus也是在此基础上升华的一个开源库,是和greenrobot的EventBus完全是两个不独立的开源项目,一开始我也是摸不清两者以为 都是同一个大神写后来发现是两个不同的开源库。 概述: AndroidEventBus类似于观察者模式,通过register函数将需要订阅事件

google_fly的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android 事件总线总结

Android 应用开发过程中,经常会设计Activity、Fragnebt、Service等不同组件或者模块之间的消息传递,使用传统的方法,往往会写出丑陋的代码,而且不同组件和模块之间耦合严重。随着模块的日益增多、代码逻辑的不断新增和修改,整个代码的架构就会显得越来越混乱。 举个栗子:多个Activity页面跳转和数据回传的问题,例如Acticity A 跳转到 Activity B,接着跳转到...

weixin_42009516的博客 523

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

EventBus的理解及应用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34357267的博客 1133

Eventbus

启舰 当乌龟有了梦想…… 目录视图 摘要视图

insert的博客 313

EventBus使用详解(二)

前言:这段时间感觉自己也有点懒了,真是内心有点自责呢,除了工作,也没做点什么,EventBus也是一周前总结出来的,只能以写博客为名来弥补内心的罪恶感了,集合同事们做的项目,虽然上周开动了,但总感觉大家积极性不高,如何才能做一个合格的管理者,还真是一个考验。follow your heart!! just do it! 请大家尊重原创者版权,转载请标明出处:http://blog.csdn.

l419070777的专栏 630

EvenyBus初理解

缘由:    平时工作,因为懒于动笔的原因,也没注重技术和经验的积累,导致之前曾经研究过的问题现在又忘记了,所以要慢慢注重积累,那么就从写作开始,谈谈对工作中碰到的问题进行整理和归纳。    我们都知道,在Android中,想处理事件传递,可以用Handler+MessageQueue+Message+Looper循环,固然是有解决方法,但是这个使用起来不方便,代码写起来也不简洁,同时还必须要理解...

yangxingda188的专栏 317

学习EventBus3的使用

前言 EventBus是greenrobot在Android平台发布的一款以订阅——发布模式为核心的开源库。EventBus翻译过来是事件总线的意思,可以这样理解:一个个事件(event)发送到总线上,然后EventBus根据已注册的订阅者(subscribers)来匹配相应的事件,进而把事件传递给订阅者,这也是观察者模式的一个最佳实践。 那么EventBus可以用到什么地方呢?我们平

Dimen-zhou的博客 414

维护事件处理的优秀工具:org.greenrobot.EventBus 使用介绍

使用开源的org.greenrobot.EventBus可以更好地维护事件处理,取代反射(参考:https://blog.youkuaiyun.com/haoranhaoshi/article/details/103816810),取代自写监听(参考:https://blog.youkuaiyun.com/haoranhaoshi/article/details/84250934)。 import org.green...

haoranhaoshi的博客 4494

Android开源库——EventBus使用教程

前言EventBus这个开源库相信很多Android开发者都用过,它是greenrobot出产的,greenrobot的厉害就不用我多说了吧,它还出产过比较出名的数据库操作开源库greenDAO。 Android传统的消息传递方式一般是通过Intent、Handler、BroadcastReceiver等等来进行的,这些方式也算是简单易用,但也有许多缺点,比如说在进行消息传递时需要写大量的模板代码

CharmingWong的博客 781

EventBus 3.0: 入门使用及其使用 完全解析

前言 EventBus是greenrobot再Android平台发布的以订阅-发布模式为核心的开源库。 EventBus翻译过来是事件总线意思。可以这样理解:一个个(event)发送到总线上, 然后EventBus根据已注册的订阅者(subscribers)来匹配相应的事件,进而把事件传递给订阅者, 这也是观察者模式的一个最佳实践。 我们平常开发中,当遇到Activity与Activit...

heishuai123的博客 248

greenRobot的EventBus

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34112208的博客 108

EventBus 开源库学习(一)

正常我们都是先订阅,才能接收到发出的事件,sticky的作用就是订阅者可以先不进行注册,事件先发出,再注册订阅者,同样可以接收到事件,并进行处理。是一款在 Android 开发中使用的发布-订阅事件总线框架,基于观察者模式,将事件的接收者和发送者解耦,简化了组件之间的通信,使用简单、效率高、体积小。该模式下,在主线程(UI线程)发送事件,则直接在主线程处理事件,如果处理方法中有耗时操作就会堵塞进程。是优先级,int类型,默认值为0。放在主线程并连续发送两次,接收事件的函数加上耗时操作,运行结果如下,两次。

孔小乐的博客 1795
上一篇: Java 之反射
下一篇: greenrobot的EventBus 源码解析
J_山寨少主
博客等级 码龄11年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值