Android第三方库-EventBus基本使用和黏性事件

2024-02-24 06:59

本文主要是介绍Android第三方库-EventBus基本使用和黏性事件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                                             EventBus 是什么

官方解释(谷歌翻译):

            EnvestBus是Android和Java的开源库,它使用发布者/订阅者模式进行松散耦合。EventBus使中央通信能够用几行代码将类解耦——简化了代码,消除了依赖关系,加快了应用程序开发。

         使用EventBus获得的好处:

               1   它简化了组件之间的通信将事件发送者和接收者分离
               2   在UI工件(例如,活动,片段)和后台线程中表现良好
               3   避免复杂且容易出错的依赖关系和生命周期问题
               4  很快; 专门针对高性能进行了优化
               5  很小(<50k)
               6  已经通过100,000,000+安装的应用程序在实践中得到证实
               7  具有交付线程,用户优先级等高级功能。

                     简单说就是   可以代替Intent、Handler、Broadcast等   ,在 Thread  Fragment、Activity之间传递消息。

 

 

                                             EventBus 的基本使用

                                                                                 (代替intent进行Activity之间的传值)

eventbus1的业务:           

                             MainActivity(放置一个Button 和 TextView)   点击按钮跳转到 另一个 Activity  (放置一个Button) 

                             点击 Activity中的按钮 返回数据给MainActivity 并 finish();

                             MainActivity的 TextView 显示返回的数据

 

1  导包(Jar包也可以)

 implementation 'org.greenrobot:eventbus:3.1.1'

2  注册和反注册(哪个类接收信息那个类进行注册和反注册)

           注册  (   onCreate(Bundle savedInstanceState)方法中 在加载布局之后 )

 EventBus.getDefault().register(this);

          反注册(   void onDestroy()  方法中  进行反注册)

 EventBus.getDefault().unregister(this);

3  MainActivity按钮监听器跳转Activity

 @Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.intenttwo:Intent intent = new Intent(this, EventBusSendActivity.class);startActivity(intent);break;}}

4  另一个Activity的按钮点击事件

 

 @Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.senddata://使用 EventBus 发送事件//参数必须是EventBus的消息对象,必须和接受的数据类型保持一致EventBus.getDefault().post(new EventBusMessage("给第一个界面发送信息"));finish();break;}}

5    EventBusMessage是一个消息类,新建就行

/*** 消息类,一个容器,负责存放数据* 方便另一个订阅者接受消息*/public class EventBusMessage {private String Message;public EventBusMessage(String message) {Message = message;}public String getMessage() {return Message;}public void setMessage(String message) {Message = message;}
}

6  MainActivity接收消息( MainActivity 里写的方法)

 

  
//    @Subscribe   这是采用注解的方式,在EventBus3.0以下是反射的方式
//    (threadMode = ThreadMode.MAIN)  设置模式 一共4个
//    方法名   没什么用  随便起
//    方法参数 这是重要的  参数类里面的属性就是要传递的属性类型,实例采用的是String@Subscribe(threadMode = ThreadMode.MAIN)public void MessageEventBus(EventBusMessage busMessage) {//Textview 设置数据showData.setText(busMessage.getMessage());}

7  运行效果

 

 

 

                                    EventBus 的黏性事件

 

eventbus2的业务:           

                 MainActivity(放置一个Button )   点击按钮设置黏性事件并跳转到 另一个 Activity  (放置一个Button 和 TextView) 

                 点击 Activity中的按钮接收数据

 

1  导包(Jar包也可以)

    implementation 'org.greenrobot:eventbus:3.1.1'

2  MainActivity设置黏性事件

  intenttwo.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//使用EventBus 设置一个黏性事件,并跳转界面EventBus.getDefault().postSticky(new EventBusMessage("发送给子界面的黏性事件"));//跳转界面Intent intent = new Intent(MainActivity.this, ReceiveActivity.class);startActivity(intent);}});

3 另一个Activity 注册 ,反注册, 接收数据

      按钮点击事件注册

 mSenddata.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//使用 一个boolean mflag 判一下  注册只能一次!!!if (mflag) {//注册 EventBusEventBus.getDefault().register(ReceiveActivity.this);mflag = false;}}});

    反注册和解除黏性事件

 @Overrideprotected void onDestroy() {super.onDestroy();//解除黏性事件  ,也可以单个解除(项目就一个就全移除吧)EventBus.getDefault().removeAllStickyEvents();//反注册 EventBusEventBus.getDefault().unregister(ReceiveActivity.this);}

   接受数据 

// sticky = true 黏性事件必须设置上  要不然接收不到@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)public void gzlMessage(EventBusMessage busMessage) {mShowData.setText(busMessage.getMessage());}

4  运行效果

 

 

EventBus总结:

                   EventBus.getDefault().postSticky()  发送黏性事件

                @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)  接收黏性事件信息

                   EventBus.getDefault().post()    普通

                @Subscribe(threadMode = ThreadMode.MAIN)  接收

                   哪里接收信息 哪里进行注册和反注册

 

 

 

这篇关于Android第三方库-EventBus基本使用和黏性事件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/741312

相关文章

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl