概述

由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. Rundeck概况

    1.Rundeck介绍 RunDeck是用Java/Grails写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程.通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低 ...

  2. Spring-2-A Magic Grid(SPOJ AMR11A)解题报告及测试数据

    Magic Grid Time Limit:336MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Tha ...

  3. PHP开发之apache mac上配置

    我使用的Mac OS X版本是10.8.2,Mac自带了Apache环境. 启动Apache 设置虚拟主机 启动Apache 打开“终端(terminal)”,输入 sudo apachectl -v ...

  4. Http中Get和Post的区别(转载)

    在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的.Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可 ...

  5. static变量、static方法之间的异同

        private SchemeBean getEmptyScheme() {        SchemeBean scheme = new SchemeBean();        scheme ...

  6. Putting Apache Kafka To Use: A Practical Guide to Building a Stream Data Platform-part 2

    转自: http://confluent.io/blog/stream-data-platform-2          http://www.infoq.com/cn/news/2015/03/ap ...

  7. mybatis的操作数据库基础

    1.domain类 package com.xiaostudy.mybatis.domain; /** * @desc domain类 * @author xiaostudy * */ public ...

  8. vjudge-A-这是测试你会不会语言的模拟

    2017-07-14 18:13:35 writer:pprp 介绍:最基本用代码展示思想的一道题 题意如下; 他细细观察了自己的工作环境,发现整个工作室是一个N行M列的矩形布局,或者是因为屌丝的本性 ...

  9. Gym - 100712B Rock-Paper-Scissors

    https://vjudge.net/problem/Gym-100712B 题意: 石头剪刀布游戏. 给出一个玩家n局的出的顺序,现在另一个是这样出的,X+Y+Z=n,在前X轮出石头,中间Y轮出布, ...

  10. gulp+es6构建页面

    遇到的问题: 1.es6如何使用,定义一个demo.js //demo.js export default class demo { // 构造函数 constructor(){ //在构造函数中调用 ...