EventBus是一个订阅/发布消息总线,实现在应用程序里面,组件之间,线程之间的通信。因为event是任意的类型,所以这个使用起来非常方便。

eventbus中的角色:

event:当然就是事件啦

subscriber:事件的订阅者,先注册,接收特定的对象,并通过onEventXXX()来回收处理事件。

Publisher:事件的发布者,通过post发布信息。

处理过程主要分为5步:

1.定义一个事件(event)

2.注册一个订阅者

3.发布一个事件

4.接收处理一个事件

5.注销一个订阅者

四种处理事件的方式onEventXXXX

onEvent函数一共有四种,前面的例子只用到一个onEvent。

函数名 含义 ThreadMode
onEvent 事件处理在事件发送的那个线程执行 PostThread
onEventMainThread 事件在主线程-UI线程执行 MainThread
onEventBackgroundThread 事件在一个后台线程执行(就一个后台线程) BackgroundThread
onEventAsync 事件会单独启动一个线程执行(每个事件都会启动一个线程) Async

其中前三个事件处理方式,都应该尽快完成。

在as下的代码示例

改module下的在build.gradle 文件里面,dependencies目录下添加这一句话

compile 'de.greenrobot:eventbus:2.4.0'

在连网的情况下,build工程,as会自动去网上下载相应的jar包。build结束后就可以编程了。

1.定义event。在FirstEvent.java中的代码如下

 public class FirstEvent {

     private String msg;
public FirstEvent(String str){
msg = str;
} public String getMsg(){
return msg;
}
}

2.注册一个订阅者,在MainActivity.java 中的onCreate()方法中加入如下代码

 EventBus.getDefault().register(this);

3.发布一个事件。在SecondActivity中发布一个事件,当点击button后发布事件,代码如下

   protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second); btn = (Button)findViewById(R.id.second_btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //发布一个事件
EventBus.getDefault().post(new FirstEvent("this is an event. "));
}
});

4.接收并处理一个事件,在MainActivity中处理改事件,添加如下代码。

  public void onEventMainThrend(FirstEvent event){
String str = "this is in main activity , "+event.getMsg(); Log.d("yuqt",str);
tv.setText(str);
Toast.makeText(this,str,Toast.LENGTH_LONG).show();
}

5.注销事件,在onDestroy()中进行注销。

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

完成。

在Android studio环境下使用EventBus的更多相关文章

  1. Android Studio环境下代码混淆+签名打包

    Android Studio环境下代码混淆+签名打包 作者 Mr_冯先生 关注 2016.08.21 01:10 字数 1040 阅读 734评论 5喜欢 34 注:本文使用的Android Stud ...

  2. Android Studio环境下搭建ReactNative

    1.安装Android Studio首先肯定是 安装Android Studio(包含SDK)(国内推荐)ps:这里有一点要注意,需要为SDK配置环境变量,名称必须为ANDROID_HOME 2.安装 ...

  3. 【Mac + Android】之Android Studio 环境搭建,AVD模拟器运行(包括:命令行运行AVD,并且Genymotion模拟器插件配置运行)

    目录: 前提.Mac环境下手动配置Android SDK 一. Android Studio下载及配置 二.AVD模拟器配置运行 扩展:命令行运行AVD模拟器 三.在Android Studio 中配 ...

  4. genymotion安装(unknown generic error)及配置在Android studio环境中

    /*转载请注明出处.本文地址:http://write.blog.csdn.net/postedit/44261371*/ genymotion模拟器的长处我就不阐述了,一个字:快!! .如今来说一下 ...

  5. Ubuntu下Android Studio环境搭建

    1.JDK安装 a.准备 由于AS(Android Studio)不支持openjdk,需要另行下载oracle jdk,同时官网指出对于64位linux系统,为了能在其上运行32位程序,需要安装一些 ...

  6. 【Android测试】【随笔】Android Studio环境搭建

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5482778.html 随着Android Studio的推 ...

  7. Android Studio 环境部署 (转载)

    Android Studio的安装和使用过程经常需要下载以来文件和Gradle版本,而Google网站在天朝的访问可谓步履维艰,没有稳定的FQ工具是非常痛苦的.何况,作为一个优秀的程序员,不能访问国外 ...

  8. Android Studio 环境搭建参考,jdk10javac命令提示不是内部或外部命令

    https://blog.csdn.net/qq_33658730/article/details/78547789 win10下Android Studio和SDK下载.安装和环境变量配置 http ...

  9. 【App性能监控】:Android studio环境的搭建(以及遇到个各种坑)

    今天搭建app性能测试环境,使用的是android studio的Android Device Monitor抓取trace日志分析: 1,下载最新的android studio安装,这一步没啥问题: ...

随机推荐

  1. iOS生成一个32位的UUID

    - (NSString *)uuidString { CFUUIDRef uuid_ref = CFUUIDCreate(NULL); CFStringRef uuid_string_ref= CFU ...

  2. THOUGHTS: programming in linux... with third_party open sources... methods

    Actually I do not have experiences in programming with open sources/third party libs.. in linux.. I ...

  3. JavaScript(2)——对象属性、原型与原型链

    对象属性.原型与原型链 哈哈哈,我的第二篇博客哟,说的是对象属性.原型与原型链.可能这些只是某些小点串联起来的,逻辑性没有很强.所以会对文章的可读性和理解性带来一些困扰.不过,今天我又前进了那么一小步 ...

  4. opencv鼠标操作及GUI矩形绘画

    OpenCV的鼠标操作是通过一个中介函数配合回调函数来实现的.指定鼠标操作消息回调函数的函数为SetMouseCallback. void setMouseCallback(const string& ...

  5. javascript语句语义大全(5)

    1. var str = "abcd";alert(str.length);alert(str.charAt(0));//获取下标为0的字符alert(str.charCodeAt ...

  6. C4.5算法总结

    C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法.它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属于一个互斥的类别中的某一类.C4.5的目标是通过学习, ...

  7. JavaScript返回上一页并自动刷新

    返回并刷新 <script>alert("恭喜您,操作成功!"); window.location.href=document.referrer; </scrip ...

  8. Android Camera Api的心得

    (一) 前言最近看Camera的api,觉得写的真的不错.现在翻译过来,给大家分享分享,译文可能不太好,大家将就着看哈. (二) 正文1. CameraCamera是Android framework ...

  9. 打开一个activity,让edittext不获得焦点

      在实际开发中,有的页面用到Edittext控件,这时候进入该页面可能会自动弹出输入法,这么显示不太友好,所以需要设置一下让Edittext默认不自动获取焦点.在网上查资料解决办法如下: 在Edit ...

  10. zf-关于荆州首页鼠标移动到导航栏上去触发的js 显示 问题解决办法

    是我copy代码的 时候 这个触发的属性没有修改,导致出现BUG,改成mopen('m2') 就好了