概述

由greenrobot织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架;

EventBus是一个消息总线,以观察者模式实现,用于简化程序的组件、线程通信,可以轻易切换线程、开辟线程。EventBus分离了事件的发送者和接收者的耦合关系;它可以替代我们传统的Intent,Handler,Broadcast在Fragment,Activity,Service,线程之间传递数据,执行方法。

用法

EventBus的git地址:https://github.com/greenrobot/EventBus

在Android项目中的build.gradle中添加依赖:

compile 'org.greenrobot:eventbus:3.0.0'

1.使用EventBus首先要创建一个传递的事件类

  public class MessageEvent {
public MessageEvent(String message) {
this.message = message;
} public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
} private String message;
}

从代码中可以看出EventBus传递的事件类不需要继承任何的接口和基类,就是一个普通的java类;

2.用于EventBus内部采用的是观察者模式,因此要使用EventBus框架,首先就是要先注册/订阅事件,在EventBus框架中注册/订阅事件也非常的简单,只需要一行代码;

  EventBus.getDefault().register(this);

注册方法中的this就是我们的订阅类,也就是观察者,可以是一个Fragment,Activity,Service;

3.在EventBus框架中可以注册/订阅一个事件,也可以取消注册/订阅事件,同样也很简单;

EventBus.getDefault().unregister(this);

4.在观察者模式中当被观察者发生事件后,观察者内部就有消息接收的方法,在EventBus也同样,需要在订阅类中实现我们的消息接收的方法;

  @Subscribe
public void onMoonEvent(MessageEvent messageEvent){
textView.setText(messageEvent.getMessage());
}

在EventBus框架中对于观察者的消息接收方法有一定的限制,首先方法必须是Public,而且方法的参数的类型必须是我们定义的事件类;而且方法必须添加”@Subscribe“注解,因为在EventBus内部查找方法时,是根据注解来进行区分;

在消息处理方法中我们也可以终止事件的传递,后续的事件不再调用,只能在传递事件的时候调用;

  EventBus.getDefault().cancelEventDelivery(event) ;

5.最后一步就是被观察者触发事件,在EventBus框架使用post(粘性事件触发使用postSticky)方法;

   EventBus.getDefault().post(new MessageEvent("我是从SecondActivity 传过来的信息"));

整个EventBus框架的使用就是这么简单;关于事件类的分发中转都是EventBus框架内部进行了实现,使用者可以不用关心,只关心自己业务逻辑的实现;

由浅入深了解EventBus:(一)的更多相关文章

  1. 由浅入深了解EventBus:(六)

    线程模型 在EventBus3.0框架中执行线程的快速切换,通过ThreadMode来指定线程在哪个线程中执行; 在EventBus3.0框架线程模型有个PendingPost 类负责数据的传递; f ...

  2. 由浅入深了解EventBus:(五)

    事件分发 EventBus3.0的事件的分发时通过EventBus类中的post(粘性事件为postSticky)方法,post与postSticky的唯一区别就是,在postSticky内部首先会向 ...

  3. 由浅入深了解EventBus:(四)

    事件注册 在EventBus3.0框架中订阅者对事件进行注册/订阅是通过EventBus类中的register方法来实现的,register的方法参数就是我们的订阅者的实例; public void ...

  4. 由浅入深了解EventBus:(三)

    原理 EventBus的核心工作机制如下图 在EventBus3.0架构图: EventBus类 在EventBus3.0框架的内部,核心类就是EventBus,订阅者的注册/订阅,解除注册,以及事件 ...

  5. 由浅入深了解EventBus:(二)

    概念 深入学习EventBus框架,就必须理解EventBus的相关原理和一些概念: Subscribe 在EventBus框架中,消息的处理接收方法必须要“@Subscribe”注解来进行标注: p ...

  6. Android消息传递之基于RxJava实现一个EventBus - RxBus

    前言: 上篇文章学习了Android事件总线管理开源框架EventBus,EventBus的出现大大降低了开发成本以及开发难度,今天我们就利用目前大红大紫的RxJava来实现一下类似EventBus事 ...

  7. EventBus实现activity跟fragment交互数据

    最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...

  8. 【热门技术】EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~

    一.写在前面 还在为时间接收而烦恼吗?还在为各种组件间的消息传递烦恼吗?EventBus 3.0,专注于android的发布.订阅事件总线,让各组件间的消息传递更简单!完美替代Intent,Handl ...

  9. PropertyGrid控件由浅入深(二):基础用法

    目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...

随机推荐

  1. iClap的名字是怎么来的,clap是有什么特殊的意义么?

    iClap的名字来源于:Clap中文是鼓掌的意思,鼓掌代表合拍,一个团队的价值观以及工作方式合拍,是最重要的,当项目启动时,大家对产品认可,鼓掌开始实施:当项目成功上线,团队也会以鼓掌的形式庆祝:当我 ...

  2. redis安全设置

    1. 设置监听ip为本地和内网ip bind 127.0.0.1 192.168.1.99 ## 可以是多个ip,用空格分割 2. 设置监听端口 port 16379 3. 设置密码 在配置文件中加入 ...

  3. $ 一步一步学Matlab(1)——初识Matlab

    本文分四步走策略:第一,Matlab是个什么玩意:第二,为什么要学Matlab:第三,怎样轻松.无痛.少走弯路地学习Matlab:第四,怎样写一个Matlab的Hello World.通过这四步走,达 ...

  4. $python用装饰器实现一个计时器

    直接上代码: import time from functools import wraps # 定义装饰器 def fn_timer(function): @wraps(function) def ...

  5. head中的title显示在body中

    今天遇到一个问题,就是title中的内容会显示在body中 <head> <title>324234</title> </head> 网上搜了一下是说编 ...

  6. 基于JWT的token身份认证方案

    一.使用JSON Web Token的好处? 1.性能问题. JWT方式将用户状态分散到了客户端中,相比于session,可以明显减轻服务端的内存压力. Session方式存储用户id的最大弊病在于S ...

  7. oracle过程书写规范

    ORACLE存储过程编码规范 1.1         变量规范 Ø        变量名全部采用小写,局部变量名使用“v_”开头,输入参数以“i_开头,输出参数以“o_”开头,输入输出参数用io_开头 ...

  8. C++之条形码,windows下zint库的编译及应用(二)

    zint库是一个开源的第三方库,提供了生成条形码.二维码等功能.本文主要介绍zint库的生成及简单应用.   0windows下zint库的编译及应用(一)   工具/原料   vs2012 生成条形 ...

  9. STM32 HAL库详解 及 手动移植

    源: STM32 HAL库详解 及 手动移植

  10. asp.net操作GridView添删改查的两种方法 及 光棒效果

    这部份小内容很想写下来了,因为是基础中的基础,但是近来用的比较少,又温习了一篇,发现有点陌生了,所以,还是写一下吧. 方法一:使用Gridview本身自带的事件处理,代码如下(注意:每次操作完都得重新 ...