EventBus的使用;消息传递之EventBus;
EventBus传递消息(数据)和广播有点像,对广播传递数据有兴趣的可以看一下;Android数据传递,使用广播BroadcastReceiver;
1、添加build.gradle
implementation 'org.greenrobot:eventbus:3.1.1'
好了,引入之后我们就可以愉快的使用eventbus了;
2、在接收消息的界面:MainActivity
注册EventBus接收器:
EventBus.getDefault().register(this);
接收EventBus发送过来的数据:
@Subscribe (threadMode = ThreadMode.MAIN) //主线程接收事件
public void onEventBus(String msg){
tv.setText(msg);
}
作为一个有经验的开发人员,我们一般的都会在界面销毁的时候去反注册一下:
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
下面是MainActivity类中的完整代码;
public class MainActivity extends AppCompatActivity { private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);
tv = findViewById(R.id.tv);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,InputActivity.class));
}
});
}
@Subscribe (threadMode = ThreadMode.MAIN) //主线程接收事件
public void onEventBus(String msg){
tv.setText(msg);
} @Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
3、发送数据的类:InputActivity;
发送消息:
EventBus.getDefault().post(((EditText)findViewById(R.id.et)).getText().toString());
这样MainActivity中带有@Subscribe注解的onEventBus方法就能接收导数据了;
public class InputActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input);
} public void postMsg(View view) {
EventBus.getDefault().post(((EditText)findViewById(R.id.et)).getText().toString()
+"____我就是EventBus发送的消息,是不是接收到很开心呢!!!");
finish();
}
}
布局:R.layout.activity_input
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".InputActivity">
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/et"
android:text="发送EventBus消息"
android:onClick="postMsg"
/>
</RelativeLayout>
还有一些粘性消息,切换线程的自己可以去看一下,这只是最简单的使用方法;
EventBus的使用;消息传递之EventBus;的更多相关文章
- Android消息传递之EventBus 3.0使用详解
前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...
- Android消息传递之EventBus 3.0
Android消息传递之EventBus 3.0使用详解 http://www.cnblogs.com/whoislcj/p/5595714.html EventBus 3.0进阶:源码及其设计模式 ...
- EventBus (二) 使用详解——EventBus使用进阶
相关文章: 1.<EventBus使用详解(一)——初步使用EventBus> 2.<EventBus使用详解(二)——EventBus使用进阶> 一.概述 前一篇给大家装简单 ...
- EventBus使用详解(二)——EventBus使用进阶
一.概述 前一篇给大家装简单演示了EventBus的onEventMainThread()函数的接收,其实EventBus还有另外有个不同的函数,他们分别是: 1.onEvent2.onEventMa ...
- [EventBus源码解析] 初探EventBus
本期blog作为EventBus(以下简称EB)学习的始动篇,主要记载了EB的功能.优点.使用方法,内容基于github上的README.md与HOWTO.md. 何为EventBus EB实现了An ...
- EventBus的使用,初学EventBus传值
一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...
- Android消息传递之基于RxJava实现一个EventBus - RxBus
前言: 上篇文章学习了Android事件总线管理开源框架EventBus,EventBus的出现大大降低了开发成本以及开发难度,今天我们就利用目前大红大紫的RxJava来实现一下类似EventBus事 ...
- 【热门技术】EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~
一.写在前面 还在为时间接收而烦恼吗?还在为各种组件间的消息传递烦恼吗?EventBus 3.0,专注于android的发布.订阅事件总线,让各组件间的消息传递更简单!完美替代Intent,Handl ...
- Android开发学习之路-EventBus使用
EventBus是一个通过发布.订阅事件实现组件间消息传递的工具. 它存在的目的,就是为了优化组件之间传递消息的过程.传统组件之间传递消息的方法有使用广播,回调等,而这些方法使用都比较复杂. 工作原理 ...
随机推荐
- jmeter一些插件下载网址
JSONPathExtractor的插件下载 https://jmeter-plugins.org/wiki/JSONPathExtractor/
- linux od命令详解
Linux od命令 Linux od命令用于输出文件内容.od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来 将指定文件以八进制形式(默认)转储到标准输出.如果指定了多于一个的文件参数 ...
- Kafka Stream
Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature(当前:1.0.0-rc0,参见:https://github.com/apache/kafka/releas ...
- Redis几种数据类型的应用场景(转)
原文地址:https://blog.csdn.net/xiaoliuliu2050/article/details/73250708
- IDE0022 使用方法的表达式主体
这错误提示意思应该是:推荐您将此方法改为用“表达式主体”形式实现 所谓表达式主体,是类似 public void DisplayName() => Console.WriteLine(ToStr ...
- Reg2Bat_By Slore(生成同名bat文件,支持XP WIN7 WIN7X64).vbs
原文http://slore.blogbus.com/logs/52627038.htmlSlore编写的这个reg文件转换为bat文件,是逐句转换的,不是通过批处理生成临时reg文件然后导入的方法, ...
- C++11--右值引用(移动语义)
/*################################################################## * 右值引用 (C++ 11) * 主要用于以下: * 1. ...
- 【RPC】使用Hessian构建RPC的简单示例
服务接口和实现 public interface HelloService { // 服务方法 String sayHello(String name); } public class HelloSe ...
- Unity3D工程版本管理方案【转自 兜里】
参阅:http://outofmemory.cn/wr/?u=http%3A%2F%2Fblog.dou.li%2Funity3d%25e5%25b7%25a5%25e7%25a8%258b%25e7 ...
- Hadoop概念学习系列之为什么hadoop/spark执行作业时,输出路径必须要不存在?(三十九)
很多人只会,但没深入体会和想为什么要这样? 拿Hadoop来说,当然,spark也一样的道理. 输出路径由Hadoop自己创建,实际的结果文件遵守part-nnnn的约定. 如何指定一个已有目录作为H ...