事件回调 和通知方式的总结(EventBus框架的使用)

基于Guava API实现异步通知和事件回调,Java需要掌握的技能 每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。轻大家的负担。**[外链图片转存中…(img-qyJZFJMv-1711104204511)][外链图片转存中…(img-ZKCehq1m-1711104204512)] 阅读详情

基本介绍 和使用方式:

http://www.jianshu.com/p/a040955194fc

https://juejin.im/entry/570ae5668ac247004c3128a4

使用的情景:

通常在user 退出或者登陆时 通知各个界面进行刷新。 或者当数据完成后通知

因为是根据传入的对象进行回调的,所以可以选择 String 类型 判断字符串的标记值 进行针对性的刷新界面!

传统事件通知方式:

1.Activity 和子 fragment间(adapter 和 Acitivity间 等等)可以通过 定义回调函数的方式进行交互

1.自定义回调 在 A类中 定义 接口 和接口方法,并在需要进行回调的地方 使用该方法

public class A_Fragment extends BaseFragment {
    private onSwitchpaperListener onSwitchpaperListener;

    //定义接口和接口方法
    public interface onSwitchpaperListener{
       void  switchpaper(int i);
    }


     //对外提供一个设置监听的方法。
    public void setOnSwichtpaerListener(onSwitchpaperListener listener){
        this.onSwitchpaperListener=listener;
    }
 
    @Override
    public void intiEvent() {
               
                if(onSwitchpaperListener!=null){
                     onSwitchpaperListener.switchpaper(position);
                 }else {

                 }
    }

}

在B fragment中 实现具体的操作逻辑,并传入A 中所需要的参数:

   mainActivity.getAFragment().setOnSwichtpaerListener(new Slidingleft_Fragment.onSwitchpaperListener() {
            @Override
            public void switchpaper(int i) {
                BaseCenterPaper currentPaper= baseCenterPaperList.get(i);
                tv_title.setText(lists.get(i).getTitle());
                //先移除
                fl.removeAllViews();
                currentPaper.initData();
                fl.addView(currentPaper.getRoot());
            }
        });



2.Activity StartActivityForResult之间的回调通知 。

主要是两个参数 resultcode  requedecode

请求码用来判断是从那个Activity 发出的 resultcode 用来判断 是从哪个Acitivity返回的

这样 在 onActivityResult 方法中就能准却判断

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode == Contants.REQUEST_CODE && resultCode == this.RESULT_OK) {

            Log.d("登录后mainActivity执行回调","ture");

            new Thread() {
                public void run() {
                    //这儿是耗时操作,完成之后更新UI;
                    runOnUiThread(new Runnable(){

                        @Override
                        public void run() {
                            //通知子view g

                            if (user != null) {
                                //更新mine
                                refrushMineView();
                                //更新购物车
                                refrushShopCarView();
                            }
                            else {
                            }
                        }

                    });
                }
            }.start();

        }
        if (requestCode == 2 && resultCode == 2) {

            Log.d("购物车执行回调","ture");

            new Thread() {
                public void run() {
                    //这儿是耗时操作,完成之后更新UI;
                    runOnUiThread(new Runnable(){

                        @Override
                        public void run() {
                            //通知子view g
                            if(user!=null)
                            {
                                 refrushShopCarView();
                            }
                            else {
                            }
                        }

                    });
                }
            }.start();

        }

         if (user != null) {
            //跳转至目标Activity
            if (MyApplication.getInstance(this).getIntent() == null) {

            }
            else {
                MyApplication.getInstance(this).jumpToTargetActivity(this);
            }
        }
        else {

        }


    }

注意事项!

onBack()回退方法! 要在super.onBack 之前 setResult 不然会无效, 所得值一直是0


3.EventBus使用技巧

1.定义事件基础类,通过注解代替枚举提供几种可选择的事件类型

public class CTEvent {

    /**
     * 事件类型
     */
    @IntDef({TYPE_LOGIN, TYPE_CHECK_EMAIL})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Type {
    }

    /**
     * 登陆事件
     */
    public static final int TYPE_LOGIN = 0;
    /**
     * 注册事件
     */
    public static final int TYPE_CHECK_EMAIL = 1;

    public @Type int type;

    public CTEvent(@Type int type) {
        this.type = type;
    }

}

2.事件类型的封装,通过注解代替枚举的方式定义事件产生时的必要参数

    /**
     * 原因
     */
    @IntDef({REASON_NONE, REASON_INVALID_PARAM})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Reason {
    }

    /**
     * 无错误
     */
    public static final int REASON_NONE = 0;
    /**
     * 无效的参数
     */
    public static final int REASON_INVALID_PARAM = 1;

    public boolean result;
    public  @Reason int reason;

    public CTLoginEvent(@Type int type, boolean result, @Reason int reason) {
        super(type);
        this.result = result;
        this.reason = reason;
    }

3.事件产生

              EventBus.getDefault().post(new CTCheckEmailEvent(CTEvent.TYPE_CHECK_EMAIL, false, null));

4.事件接受, 这里需要注意,可将返回对象的逻辑在onEvent中集中处理,而不是分散出去

@Subscribe
public void onEvent(CTEvent event) {
    switch (event.type) {
        case CTEvent.TYPE_CHECK_EMAIL:
            dealCheckEmailEvent((CTCheckEmailEvent) event);
            break;
        default:
            break;
    }
}


5.注意:

解注册

EventBus.getDefault().unregister(this);
另外,在一个类中并不能进行多次注册,所以一次事件执行,响应了两次逻辑,最大的可能就是产生了两个相同的对象。
事件总线EventBus框架的使用介绍 事件总线EventBus框架的使用介绍 . EventBus 介绍 EventBus是一款针对Android优化的发布-订阅事件总线。它简化了应用程序内各组件间、组件与后台线 程间的通信。其优点是开销小,代码更优雅,以及将发送者和接收者解耦。 . EventBus 的三要素 Event: 事件,可以是任意类型的对象 Subscriber: 事件订阅者,在 EventBus 3.0 之前我们必须定义以onEvent开头的那几个方法,分别是 onEvent 、onEventMainThread 、on 阅读详情

相关推荐

Cherry Studio 新手必看:5分钟搞定MCP服务器配置(附常见问题解决)

本文为Cherry Studio新手提供了详细的MCP服务器配置指南。文章从核心概念入手,解释了Cherry Studio作为MCP客户端如何通过MCP协议安全、标准化地扩展AI助手能力。重点讲解了uv和Bun环境的安装与常见网络问题的解决方案,并演示了如何添加首个MCP服务器(如mcp-server-fetch),助你快速构建可扩展的智能工作流。

corn8的博客 595

深入理解:回调函数

关于回调函数到底是什么,已经困扰了我很久了~ 在知乎上看到几位大神的帖子,才恍然大悟 作者:no.body 链接:https://www.zhihu.com/question/19801131/answer/27459821 来源:知乎 作者:常溪玲 链接:https://www.zhihu.com/question/19801131/answer/13005983 来源:知乎 首先要明确...

极客点儿 10万+

【一张图系列】别再混淆了!5分钟搞懂ERP、MES、PLC的职责边界与数据流》

《ERP、MES、PLC系统边界与协作解析》一文清晰阐述了制造业三大核心系统的角色分工与数据流转。文章将ERP比作企业"大脑"负责战略规划,MES作为车间"指挥官"负责执行调度,PLC则是设备"士兵"执行具体操作。通过一张架构图展示了从计划层到控制层的完整信息流:蓝色箭头表示指令下行(ERP→MES→PLC),橙色箭头代表数据上行反馈(PLC→MES→ERP)。文章强调理清系统边界对数字化转型、部门协作和项目实施的关键作用,并预告下期将深入解析ME

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 970

Android EventBus 使用详解

概述EventBus是一个Android端优化的publish/subscribe消息总线,它简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过 EventBus 实现,最常见的就是它可以代替Intent,Handler,BroadCase在Activit

zhq1363790125的博客 2730

Adams软件安装与配置全攻略:从入门到机器人仿真

机械系统动力学仿真软件Adams是工业机器人开发的重要工具,其安装过程涉及许可证配置、环境变量设置等关键技术环节。专业仿真软件安装通常需要处理系统兼容性、组件依赖和授权验证等工程问题,特别是在机器人控制仿真等场景中,还需集成MATLAB/Simulink等第三方工具。本文以Windows平台为例,详解Adams安装的核心步骤,包括系统环境检查、许可证服务器配置、工业机器人专项模块安装等实践要点,并针对NVIDIA Quadro显卡优化、27500端口通信等常见问题提供解决方案,帮助用户快速搭建可靠的仿真环境

weixin_28523493的博客 199

三极管吸潮失效分析案例

案例背景三极管也称为晶体三极管,它被视为电子电路中最重要的器件之一。三极管顾名思义具有三个电极,它最主要的功能是电流放大和开关作用。本次失效案例中的三极管在仓库存放一段时间后,在PCBA测试过程中集中发生不良。分析过程1.外观检测对失效样品进行外观检测,未发现明显破损、裂纹等不良。2.X-ray检测对失效样品进行X-ray检测,金线、绑定点未发现异常。3.开封检测对失效样品进行开封检测,发现存在键合点脱落的现象,键合点附近的晶圆破损。4.SEM检测对失效样品进行SEM检测,发现晶圆键合点位置有裂纹和破损,金

sy220504的博客 1043

EventBus事件总线(个人理解监听回调,勿喷)

不详解,只介绍用法(包括主线程调用EventBus,子线程调用EventBus) 步骤: 1、需要接收事件处注册EventBus,如在Main中注册 EventBus.getDefault().register(this); 2、新建事件类 3、需要发送事件发送发送事件,如SecondActivity中发送 EventBus.getDefault().post(new SecondFB

Mr_Leixiansheng的博客 2610

ANSYS Discovery 2023R1 入门:手把手教你玩转几何模型参数化(附历史追踪避坑指南)

本文详细介绍了ANSYS Discovery 2023R1中几何模型参数化建模的全流程,包括基础设置、参数化实战技巧及历史追踪避坑指南。通过Workbench集成和智能参数控制,工程师可以高效完成设计迭代,特别适合需要频繁调整几何模型的仿真场景。文章还提供了参数丢失的预防策略和工业应用实例,帮助用户快速掌握这一提升设计效率的核心技能。

weixin_33693070的博客 462

基于Guava API实现异步通知和事件回调

本文节选自《设计模式就该这样学》 1 基于Java API实现通知机制 当小伙伴们在社区提问时,如果有设置指定用户回答,则对应的用户就会收到邮件通知,这就是观察者模式的一种应用场景。有些小伙伴可能会想到MQ、异步队列等,其实JDK本身就提供这样的API。我们用代码来还原这样一个应用场景,首先创建GPer类。 /** * JDK提供的一种观察者的实现方式,被观察者 */ public class GPer extends Observable{ private String name = &.

Tom弹架构 1560

【TC397第2篇】TC397 EB MCAL开发指南:ADS MCAL Demo集成深度解析

通过本文的指导,我们完成了TC397 EB MCAL与ADS的深度集成,并成功运行了一个简单的MCAL Demo。这个案例不仅帮助我们理解了MCAL在实际开发中的应用,同时也展示了ADS作为一个强大的开发工具在嵌入式系统开发中的优势。在接下来的系列文章中,我们将进一步探讨MCAL的高级应用、优化技巧以及更多实用的开发案例。敬请关注,共同探索TC397 EB MCAL开发的更多精彩!

一直在水些技术小文 452

红队内网攻防渗透:内网渗透之内网对抗:实战项目&VPC1打靶&PHP-RCE&三层代理路由&防火墙上线&密码喷射&域控提权

上面已经抓取到了密码,但是我们通过拓扑分析看,要想上线win10只能通过正向shell,因为win7的防火墙是开的,win10反向主动连接肯定入站规则拦截,而win10自己没有开防火墙,所以win7主动正向连接就可以上线。win7开启了防火墙,入站规则肯定是会拦截我们的请求的,所以我们需要反向上线,让win7主动来连接我们。这里扫描发现是存在ms17010漏洞的,但是想上线192.168.2.142的话,我们没有路由是上线不了的,这里有两种办法:一种msf直接生成后门,另一种cs移植后门到msf。

HACKONE的博客 909

android谈一谈适配器(BaseMultiItemQuickAdapter)

适配器可以说几乎每个页面都会用到,作为开发3年以上的我,自认为适配器adapter这块踩坑踩得差不多了。在昨天用到BaseMultiItemQuickAdapter实现多级列表的时候深深给我上了一课,我先简单阐述下我遇到的坑,同时也说下我的解决办法: 1.多级列表实体类,适配器,item布局都可以参考下官方demo 2.假如我现在有两个itemtype,第一个itemtype有个选择框并且所有...

ZyClient的博客 4221

079、LVGL基础控件:消息框(Msgbox)

《LVGL消息框控件深度解析与避坑指南》 文章深入剖析了LVGL消息框控件的核心特性和使用技巧。消息框本质是带按钮的模态容器,而非独立窗口。作者分享了创建消息框的正确姿势、标题/内容设置方法、安全的按钮事件处理方式(避免直接调用close函数导致栈溢出),并详细介绍了模态/非模态实现、样式自定义、动态更新等实用技巧。针对常见问题如内存管理、按钮数量限制、动画效果等给出了专业建议,特别强调了消息框作为用户交互关键环节的优化重要性,建议通过异步删除、合理父对象选择等方式提升稳定性。文章包含大量实际项目经验总结,

m0_50546716的博客 153

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

文章目录1. EventBus框架1.1 EventBus简介1.2 EventBus基本使用1.2.1 添加Gradle依赖1.2.2 定义事件1.2.3 准备订阅者1.2.4 发布事件2. EventBus原理解析2.1 订阅者注册过程2.2 订阅者注销过程2.3 事件发布过程3. EventBus性能优化  事件总线模式基于发布-订阅机制实现,它是一种集中式事件处理机制,允许不同的组件之间进...

老蒋也疯狂 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

更好的事件传递方式——EventBus

对于引入第三方框架总是持一种保守的态度,因此在开发中对于一些跨组件之间的通信,常常采用的方式有: 接口回调 广播 startActivityOnResult 这些方式同样可以方便的完成组件之间的通信。只是,代码量越来越大,维护起来愈发的艰难: 穷则思变 以下是对EventBus的学习记录EventBus 是什么?EventBus 是一个 Android 事件发布/订阅框架

ZhangGeng's Blog 4627

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android框架之路——EventBus的使用

一、简介 EventBus是由greenrobot 组织贡献的一个Android事件发布/订阅轻量级框架。EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过Even

等一杯咖啡的博客 3万+

IEM模型,地表粗糙度模拟

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

Android框架——EventBus事件总线

介绍 EventBus是Android中比较流行的事件总线框架,可以无耦合的在各个组件之间传递事件,本篇文章就来介绍一下它的用法与部分重要源码。 使用方式 使用EventBus需要关注几个步骤: 注册监听类 定义事件类 实现事件回调方法 发送事件 注册监听类 在组件里调用register方法,可以让EventBus注册此类中定义的订阅方法。 EventBus.getDefault().regi...

是谁叫我 1747

EventBus的StickyEvents黏性事件详解及使用说明

EventBus还支持发送黏性事件。何为黏性事件呢?简单讲,就是在发送事件之后再订阅该事件也能收到该事件,跟黏性广播类似。 看看官网的描述 Some events carry information that is of interest after the event is posted. For example, an event signals that some ini

丶ban 1万+

SpringBoot整合EventBus事件驱动

序言   在开发中,有时候会使用到发布订阅模式,之前一直以为只要MQ才能实现,后来了解到Spring也可以通过自己的Event事件来实现发布订阅,相比MQ功能会弱很多,但是也会相对简单很多。   Spring原生的使用方式,有兴趣的小伙伴可以研究一下。实际开发可以使用Guava的EventBus以及org.greenrobot的EventBus,两者名字相同,功能也很相似,我使用的后者greenrobot。 学习过程中踩的坑: 依赖分不清:各种博客都在说guava的EventBus是多么的厉害,但是使用的

南风知我意,吹梦到西洲 5723

EventBus事件订阅与通知机制:构建响应式Elixir应用的关键

EventBus是Elixir生态中一个轻量级、可追踪且可扩展的事件总线实现,它基于ETS提供内置的事件存储和事件监控功能。本文将深入探讨EventBus的核心事件订阅与通知机制,帮助开发者快速掌握如何利用这一工具构建高效的响应式应用。 ## 什么是事件总线? 事件总线是一种实现组件间松耦合通信的设计模式,它允许不同模块通过事件的发布与订阅进行交互,而无需直接依赖彼此。在Elixir应用中,E

gitblog_00316的博客 620

Android中使用EventBus事件发布/订阅框架实现事件传递

场景 EventBus EventBus是一种用于Android的事件发布-订阅总线。它简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题,可以避免由于使用广播通信而带来的诸多不便。 官方文档 https://greenrobot.org/eventbus/documentation/ 使用场景 在做项目的时候往往需要应用程序内各组件间、组件与后台线程间的通信。比如耗时操作,等耗时操作完成后通过Handler或Broadcast将结果通知给UI,N个Activity之间需

BADAO_LIUMANG_QIZHI的博客 886

Android 事件总线框架:EventBus

EventBus 是一个适用于 Android 和 Java 的开源库,使用 发布者/订阅者 模式实现松散耦合。EventBus 仅用几行代码即可实现与解耦类的集中通信 - 简化代码、消除依赖关系并加快应用开发速度。

耐心的L的博客 2301

【EventBus】EventBus 事件总线框架简介 ( EventBus 使用流程 )

一、EventBus 事件总线框架简介、 二、EventBus 使用流程、

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

Android框架EventBus的使用

在写代码的时候,有时候在类与类之间进行通信不太方便,自己就用到了EventBus。 EventBus主要用于应用程序内各组件间、组件与后台线程间的通信。 //第一步需要添加依赖 implementation 'org.greenrobot:eventbus:3.0.0' //在获取返回信息的Activity.java中的onCreate进行注册 EventBus.getDefault().reg...

weixin_44059750的博客 1257

一文学习开源框架EventBus

EventBus 的核心是基于发布-订阅模式,通过EventBus类来管理事件的注册、发布和解除注册。它使用了反射来动态查找订阅者的方法,并通过线程池和 Handler来管理事件处理的线程。事件的发布和处理是异步和同步结合的,支持多线程的灵活调度。通过这种设计,EventBus 实现了高效、解耦的事件分发机制,是一个非常强大的工具,简化了组件之间的通信,提供了简单的 API 和灵活的事件处理机制。然而,它的性能开销、调试困难等问题也需要开发者在使用时进行权衡。

执剑人 1633

鸿蒙开发EventBus原理及使用方式

在很多复杂的场景中,我们都有机会使用EventBus去通信,它可以实现组件之间的非直接通信,允许不同的组件在不了解彼此具体实现的情况下进行事件的发送和接收。它可以用于实现组件之间的解耦,比如在一个复杂的应用中,不同页面或模块之间可以通过EventBus来传递状态变化、通知等信息。是实现高效、解耦通信的核心工具,尤其在分布式场景下,简化了跨设备交互的复杂性。它允许组件(或设备)通过事件(Event)进行解耦通信:一个组件触发事件(Emitter),其他订阅该事件的组件(Listener)会接收并处理。

ggg21gggg的博客 2077
上一篇: Dagger2 +ButterKnife 框架集成和运用
下一篇: 布局相关的细节和屏幕适配
Nela
博客等级 码龄11年 9粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值