概述

由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. cdoj1633 去年春恨却来时,落花人独立,微雨燕双飞

    地址:http://acm.uestc.edu.cn/#/problem/show/1633 题目: 去年春恨却来时,落花人独立,微雨燕双飞 Time Limit: 3000/1000MS (Java ...

  2. spark[源码]-Pool分析

    概述 这篇文章主要是分析一下Pool这个任务调度的队列.整体代码量也不是很大,正好可以详细的分析一下,前面在TaskSchedulerImpl提到大体的功能,这个点在丰富一下吧. DAGSchedul ...

  3. jxl.jar包,应该把它放在哪个文件下

    ①把鼠标放到自己的工程上右键 ②点击Properties or Build Path >> Configure Build Path, 然后弹出一个窗口,click AddExternal ...

  4. 详解Java中的clone方法 -- 原型模式

    转自: http://blog.csdn.net/zhangjg_blog/article/details/18369201 Java中对象的创建   clone顾名思义就是复制, 在Java语言中, ...

  5. Spark高级数据分析· 2数据分析

    wget https://archive.ics.uci.edu/ml/machine-learning-databases/00210/donation.zip 数据清洗 cd /Users/eri ...

  6. 在LAMP的生产环境内添加PHP的cURL扩展模块

    服务器运行一段时间后,可能突然会需求添加某个扩展,如curl.pdo.xmlrpc等, 这就需要在不重新编译 PHP   的情况下独立添加扩展. 下面以安装curl为例,介绍具体安装步骤. 1.安装c ...

  7. DevOps实践之持续集成Jenkins(最新版本测试)

    一.安装Jenkins (1)下载并安装配置Java Development Kit 8 [root@localhost ~]# rpm -ivh jdk-8u161-linux-x64.rpm Pr ...

  8. dependency的scope

    scope作用域,一共有三种作用域:compile(编译).runtime(运行).test(测试) 备注:打包必经compile阶段 1.test        测试 2.compile  编译 打 ...

  9. vmware基于主机模式实现上网(win10)

    首先查看本机win10的网络情况: 网卡VMnet1就是主机模式的网卡,确认本机win10共享了网络给vmnet1这张网卡,如果没有共享,那么进行设置: 进行上述设置,然后在vmnet1网卡上设置ip ...

  10. 20145328 《Java程序设计》实验四实验报告

    20145328 <Java程序设计>实验四实验报告 实验名称 Andoid开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android ...