EventBus使用介绍
EventBus是Android下高效的发布/订阅事件总线机制。作用是可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程之间传递数据,执行方法。特点是代码简洁,是一种发布订阅设计模式(Publish/Subsribe),或称作观察者设计模式。
下面对EventBus框架使用进行介绍以及一些需要注意的地方。
1.EventBus使用配置。
public class FirstEventModel {
private String msg;
public FirstEventModel(String msg){
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
@Subscribe
public void onEvent(){
//如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,
// 也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,
// 如果执行耗时操作容易导致事件分发延迟。 }
@Subscribe
public void onEventAsync(){
//使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync. }
@Subscribe
public void onEventBackgroundThread(){
//如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,
// 那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,
// 那么onEventBackground函数直接在该子线程中执行。 } @Subscribe
public void onEventMainThread(FirstEventModel firsEventModel){
//如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,
// onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,
// 这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,
// 所以在onEvnetMainThread方法中是不能执行耗时操作的。
activity_main_tv.setText(firsEventModel.getClass().getSimpleName() + ":" +firsEventModel.getMsg() );
}
@Subscribe
public void onEventMainThread(SecondEventModel secondEventModel){
//如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,
// onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,
// 这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,
// 所以在onEvnetMainThread方法中是不能执行耗时操作的。
activity_main_tv.setText(secondEventModel.getClass().getSimpleName() + ":" + secondEventModel.getCode());
}
2.从使用体验上感受EvenBus在处理同一进程下、不同activity、fragment的通信机制上解耦合 是比较好用的,降低了一些开发者对于解耦合处理的难度要求。有一些机制比如:startActivityForResult、广播、handle等这些可以使用eventBus替代,代码的维护性会比较高。
3.图说EventBus

这里发布者是可以有多个的,通过调用post方法,eventbus则通过反射机制根据参数列表判断调用哪个Subcriber,如果是多个subcriber参数列表一致,则都会调用,而且优先级越高则越在前面被调用到。
EventBus使用介绍的更多相关文章
- EventBus初理解
缘由: 平时工作,因为懒于动笔的原因,也没注重技术和经验的积累,导致之前曾经研究过的问题现在又忘记了,所以要慢慢注重积累,那么就从写作开始,谈谈对工作中碰到的问题进行整理和归纳. 我们 ...
- Android 框架炼成 教你怎样写组件间通信框架EventBus
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41096639 .本文出自:[张鸿洋的博客] 1.概述 关于Eventbus的介绍 ...
- Android 框架炼成 教你如何写组件间通信框架EventBus
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41096639 ,本文出自:[张鸿洋的博客] 1.概述 关于Eventbus的介绍 ...
- 蘑菇街teamtalk简介
这几天在看蘑菇街实时通讯程序teamtalk的安卓端代码.现在对程序的大概情况进行简单的介绍. 蘑菇街的teamtalk开源项目包含了服务器端,Android客户端和iPhone客户端的程序.想要进行 ...
- (转)开源项目t-io
石墨文档:https://shimo.im/docs/tHwJJcvKl2AIiCZD/ (二期)18.开源t-io项目解读 [课程18]BIO....AIO.xmind0.4MB [课程18]t-i ...
- android-------- 常用且应该学习的框架
今天来分享一下一些常用的库,在Github 上 star数也是很高的,开发中也是很常用的: 简单的分享一下,一起学习. http://www.xiufm.com/blog-1-944.html 框架名 ...
- 2017年Android百大框架排行榜
框架:提供一定能力的小段程序 >随意转载,标注作者"金诚"即可 >本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. >本文已经开源到Gith ...
- android 优秀框架整理
程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助! 1. ...
- 2017年Android百大框架排行榜(转)
一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由.网络层.UI层.通信层或其他单一功能的框架 混合开发框架:提供开发hybrid app.h5与webview结合能力.web app能力的框架 ...
随机推荐
- 学习WPF——WPF布局——初识布局容器
StackPanel堆叠布局 StackPanel是简单布局方式之一,可以很方便的进行纵向布局和横向布局 StackPanel默认是纵向布局的 <Window x:Class="Wpf ...
- 如果下次做模板,我就使用Nvelocity
普通Replace模板做法 很多人在做邮件模板.短信模板的时候,都是使用特殊标识的字符串进行占位,然后在后台代码中进行Replace字符串,如果遇到表格形式的内容,则需要在后台进行遍历数据集合,进行字 ...
- 深入探索AngularJS(持续更新)
数据双向绑定并不是Angular最出彩的地方.大部分对AngularJs的介绍都偏重于使用,使用的学习只是学了AngularJs的API,而那只能AngularJs的很小一部分.随着使用越来越深,系统 ...
- JS 数字转换为大写金额
function DX(n) { if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) return "数据非法"; var unit = "千百 ...
- phpcms v9二次开发笔记
phpcms是基于MVC结构的. 安装: 下载phpcms_v9.5.9_UTF8.zip:新建目录phpcms,将压缩包里install_package目录下所有文件复制到phpcms目录.浏览器输 ...
- This in JavaScript
声明 本文仅为读书笔记并致力于理解Js中的this关键字.如有雷同,纯属巧合.原因有二,其一:有幸看了同一本书,其二:this这玩意已被说烂了~ 为什么要用this? this提供了优雅的方式隐式传递 ...
- android: PendingIntent的使用
PendingIntent的Flags的类型: * Flags的类型: FLAG_ONE_SHOT:得到的pi只能使用一次,第二次使用该pi时报错 FLAG_NO_CREATE: 当pi不存在时,不创 ...
- 吐槽C++:C++ 类成员变量初始化 之 初始化带有参数的构造函数 的类成员变量。
本来我想写这样的代码: class MatchManager{ public: MatchManager() { } class OnTimerRunFuncHelper{ public: OnTim ...
- solr详解,开发必备
1.基础知识 创建索引的过程如下: (1).建立索引器IndexWriter,这相当于一本书的框架 (2).建立文档对象Document,这相当于一篇文章 (3).建立信息字段对象Field,这相当于 ...
- 利用python自动清除Android工程中的多余资源
我们直接在公司项目中使用,效果良好! 分享出脚本代码,希望对Android研发的同学有帮助. 提示,初学python,开发环境是Sublime Text 2,直接Ctrl+B的,其他环境下没调试过.应 ...