由浅入深了解EventBus:(一)
概述
由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:(一)的更多相关文章
- 由浅入深了解EventBus:(六)
线程模型 在EventBus3.0框架中执行线程的快速切换,通过ThreadMode来指定线程在哪个线程中执行; 在EventBus3.0框架线程模型有个PendingPost 类负责数据的传递; f ...
- 由浅入深了解EventBus:(五)
事件分发 EventBus3.0的事件的分发时通过EventBus类中的post(粘性事件为postSticky)方法,post与postSticky的唯一区别就是,在postSticky内部首先会向 ...
- 由浅入深了解EventBus:(四)
事件注册 在EventBus3.0框架中订阅者对事件进行注册/订阅是通过EventBus类中的register方法来实现的,register的方法参数就是我们的订阅者的实例; public void ...
- 由浅入深了解EventBus:(三)
原理 EventBus的核心工作机制如下图 在EventBus3.0架构图: EventBus类 在EventBus3.0框架的内部,核心类就是EventBus,订阅者的注册/订阅,解除注册,以及事件 ...
- 由浅入深了解EventBus:(二)
概念 深入学习EventBus框架,就必须理解EventBus的相关原理和一些概念: Subscribe 在EventBus框架中,消息的处理接收方法必须要“@Subscribe”注解来进行标注: p ...
- Android消息传递之基于RxJava实现一个EventBus - RxBus
前言: 上篇文章学习了Android事件总线管理开源框架EventBus,EventBus的出现大大降低了开发成本以及开发难度,今天我们就利用目前大红大紫的RxJava来实现一下类似EventBus事 ...
- EventBus实现activity跟fragment交互数据
最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...
- 【热门技术】EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~
一.写在前面 还在为时间接收而烦恼吗?还在为各种组件间的消息传递烦恼吗?EventBus 3.0,专注于android的发布.订阅事件总线,让各组件间的消息传递更简单!完美替代Intent,Handl ...
- PropertyGrid控件由浅入深(二):基础用法
目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...
随机推荐
- Rundeck概况
1.Rundeck介绍 RunDeck是用Java/Grails写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程.通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低 ...
- Spring-2-A Magic Grid(SPOJ AMR11A)解题报告及测试数据
Magic Grid Time Limit:336MS Memory Limit:0KB 64bit IO Format:%lld & %llu Description Tha ...
- PHP开发之apache mac上配置
我使用的Mac OS X版本是10.8.2,Mac自带了Apache环境. 启动Apache 设置虚拟主机 启动Apache 打开“终端(terminal)”,输入 sudo apachectl -v ...
- Http中Get和Post的区别(转载)
在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的.Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可 ...
- static变量、static方法之间的异同
private SchemeBean getEmptyScheme() { SchemeBean scheme = new SchemeBean(); scheme ...
- 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 ...
- mybatis的操作数据库基础
1.domain类 package com.xiaostudy.mybatis.domain; /** * @desc domain类 * @author xiaostudy * */ public ...
- vjudge-A-这是测试你会不会语言的模拟
2017-07-14 18:13:35 writer:pprp 介绍:最基本用代码展示思想的一道题 题意如下; 他细细观察了自己的工作环境,发现整个工作室是一个N行M列的矩形布局,或者是因为屌丝的本性 ...
- Gym - 100712B Rock-Paper-Scissors
https://vjudge.net/problem/Gym-100712B 题意: 石头剪刀布游戏. 给出一个玩家n局的出的顺序,现在另一个是这样出的,X+Y+Z=n,在前X轮出石头,中间Y轮出布, ...
- gulp+es6构建页面
遇到的问题: 1.es6如何使用,定义一个demo.js //demo.js export default class demo { // 构造函数 constructor(){ //在构造函数中调用 ...