Android 第三方类库简单使用之EventBus
Android 第三方类库之EventBus
1 PS
工欲善其事必先利其器. Eventbus也是一款在开发中常用的利器
这篇也对EventBus的简单介绍和使用,与之前个xutils介绍的级别一样.http://www.cnblogs.com/greentomlee/p/6025470.html
作者:修雨轩陈 @博客园
2 简介
开源项目地址:
https://github.com/greenrobot/EventBus
EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
Eventbus 的发布订阅(publish/subscribe)
Eventbus 有如下优点:
· simplifies the communication between components
- decouples event senders and receivers
- performs well with Activities, Fragments, and background threads
- avoids complex and error-prone dependencies and life cycle issues
· makes your code simpler (对于程序员而言,可以简化代码)
· is fast (执行速度很快)
· is tiny (~50k jar) (类库的体积很小,大约只有50k)
· is proven in practice by apps with 100,000,000+ installs
· has advanced features like delivery threads, subscriber priorities, etc.
3 环境搭建三部曲
3.1 资源下载
在github中将开源类库下载到本地:
https://github.com/greenrobot/EventBus
作者提供的很详细的说明文档, 我是参考作者的文档写出的.在github主页中也有简单使用步骤.
http://greenrobot.org/eventbus/documentation/how-to-get-started/
3.2 项目环境搭建
-------------
软件环境: Android Studio2.3 Beta3
在github中下载下来的eventbus
----------------
首先, 新建一个测试项目: TestEventBus
然后我们观察一下下载的eventbus的目录结构,并确定要导入的模块是哪一个
通过对目录中的结构分析,我们知道了:
在EventBus-master 下是有3个模块可以供我们导入项目里面的。 分别是:EventBus、EventBusAnnotationProcessor、EventBusPerformance。根据编程习惯我们知道:应该导入EventBus目录。
确定了导入的类库之后,
在该项目下新建导入的模块
选择‘evenbus’ 目录进行导入。
导入成功之后的结构如下:
接下来就是对build.gradle进行编辑(注意build.gradle文件所在的目录)
在文件中写入这句话:
compile project(':EventBus')
这是因为我们模块名称就是 EventBus
(build.gradle写入的依赖类库的名字应该与导入EventBus之后的模块名称 保持一致)
3.3 测试使用
首先描述一下我们要做什么:
为了对比intent传递参数和Event bus 传递参数的区别,同时也为了练习使用EventBus , 我们准备了两个Activity : MainActivity 和SendMsgActivity
首先利用使用传统的消息传递的方式, 将消息从MainActivity发送到SendMsgActivity上;
然后利用Eventbus 再将新的消息从SendMsgActivity传递到MainAvtivity上。
PS 利用intent传递消息的这部分不在赘述
3.3.1 在接受消息的地方注册和注销消息
首先看MainActivity
由于需要接收来自SendMsgActivity的EvenBus消息, 所以需要新建一个实例注册eventBus,注册的动作应该写在onStart()回调函数中.
@Override
protected void onStart() {// 注册event bus
super.onStart();
EventBus.getDefault().register(this);
}
同时档程序销毁的时候,也需要注销:
@Override
protected void onDestroy() {// 注销eventBus
super.onDestroy();
EventBus.getDefault().unregister(this);
}
3.3.2 在发送消息的地方写发送方法
SendMsgAcitivty 会使用Eventbus 发送消息, 那么他就是消息发送的地方.

细心的同学发现了, 我并没有在intent里面传递参数. 而是使用了
ventBus.getDefault().post()
方法类发送消息. 关键代码如下:
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().post(new MessageEvent("来, 给你发送一个消息..."));
Intent intent = new Intent(SendMsgActivity.this, MainActivity.class);
startActivity(intent);
}
});
其中 MessageEvent 是自定义个的 实体(结构体\bean)
public class MessageEvent {
public String msg="";
public MessageEvent(String msg)
{
this.msg = msg ;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
3.3.3 在消息接受的地方书写接受消息的动作
消息接受的地方(MainActivity)中接收消息的方法如下:
/**
* 处理接受消息的方法 “subscriber methods”
* 也可以使用注释
* @link http://greenrobot.org/eventbus/documentation/how-to-get-started/
*
* @param evnt
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(MessageEvent evnt)
{
String msg = evnt.getMsg();
//this.showMsgTv = (TextView) findViewById(R.id.tv_printer);
//this.showMsgTv.setText(msg);
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
出现的效果如图下:

4 扩展阅读
EventBus & Otto的使用和比较
http://www.jianshu.com/p/cb39a0018db1
RxJava和EventBus的区别?
https://www.zhihu.com/question/32179258
http://bbs.csdn.net/topics/392007033
Android 第三方类库简单使用之EventBus的更多相关文章
- Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库
第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目 ...
- android studio 引入第三方类库jar包
第三方类库jar包 这就简单多了,直接将jar包拷贝到app/libs下,然后在app下的build.gradle中添加此jar的依赖.如下: dependencies { compile 'com. ...
- Android studio中导入第三方类库
常常在github上看到一些好用的框架,但是对于一个新手怎样在android studio上导入去总会遇到各种麻烦,索性来研究下第三方类库怎样在android studio上导入. 以我在github ...
- Android Studio导入第三方类库的方法
Android Studio导入第三方类库的方法 本人也刚刚开始尝试做android app的开发,听说android studio是Google支持的android 应用开发工具,所以想应该肯定比E ...
- Android studio导入第三方类库
1.开发过程中想要导入第三方类库和Eclipse也是有差别的,我们导入SlidingMenu这个类库,从github上下载下来解压到项目目录下. 2.然后我们重启我们的android studio就会 ...
- 如何向android studio中导入第三方类库
下面分两种情况介绍一下如何导入第三方类库. 1.对于jar的类库,直接复制进libs目录,然后把jar复制进去,然后File->Project Structure,然后选中主module的名称, ...
- Android studio导入第三方类库源码以及jar包
新建一个Android项目,项目结构如下: 1.添加第三方类库源码 首先将第三方类库考入与app同级的目录下: 之后,在build.gradle(Moudule:app)下添加编译代码:在seting ...
- Android 第三方开源库收集整理(转)
原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样, ...
- 45.Android 第三方开源库收集整理(转)
原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样, ...
随机推荐
- PHP生成pdf文档
首先需要去github下载tcpdf类库 require_once('./tcpdf/tcpdf.php'); date_default_timezone_get('Asia/Shan ...
- 洛谷 P3391【模板】文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- Qt 学习之路 2(43):QStringListModel
Qt 学习之路 2(43):QStringListModel 豆子 2013年2月13日 Qt 学习之路 2 38条评论 上一章我们已经了解到有关 list.table 和 tree 三个最常用的视图 ...
- webpack 打包css报错 Error: Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead
是webpack4和extract-text-webpack-plugin的兼容性问题 执行命令:npm install extract-text-webpack-plugin@next --save ...
- APP开发的三种模式
Hybrid APP混合开发的一些经验和总结 APP开发的三种模式:Native App .web App.hybrid App 1.原生app 使用原生app (android或iOS)开发APP. ...
- windos下安装mongodb
一.下载 1. www.mongodb.com/download-center#community2.根据电脑系统下载对应的版本,3.选择zip(解压版本)/msi安装版本4.本文是用的msi(安装版 ...
- 【总结】sqlmap-tamper编写小结
目的:修改sqlmap中的tamper脚本来绕过代码对特定参数的过滤和转义 环境:win10.phpstudy2016.sqli-labs-master平台 工具:sqlmap.burpsuite 地 ...
- HDU4499
In Chinese Chess, there is one kind of powerful chessmen called Cannon. It can move horizontally or ...
- 全排列 next_permutation() 函数的使用
看来看去还是这篇博客比较简洁明了 https://www.cnblogs.com/My-Sunshine/p/4985366.html 顺便给出牛客网的一道题,虽然这道题用dfs写出全排列也能做,题意 ...
- 在CentOS 7上搭建私有Docker仓库
Hub IP:10.0.2.6 操作系统:CentOS 7 64位 Docker版本:1.12.5Client IP:10.0.2.4 操作系统:CentOS 7 64位 Docker版本:1.12. ...