项目地址:
https://github.com/greenrobot/EventBus
EventBus主要特点
1. 事件订阅函数不是基于注解(Annotation)的,而是基于命名约定的,在Android 4.0之前的版本中,注解解析起来比较慢 , 事件响应函数默认以“onEvent”开始,可以在EventBus中修改这个值,但是不推荐这么干
2. 事件响应有更多的线程选择
EventBus可以向不同的线程中发布事件,在ThreadMode 枚举中定义了4个线程,只需要在事件响应函数名称“onEvent”后面添加对应的线程类型名称,则还事件响应函数就会在对应的线程中执行,比如事件函数“onEventAsync”就会在另外一个异步线程中执行,ThreadMode定义的4个线程类型如下:
PostThread:事件响应函数和事件发布在同一线程中执行。这个是默认值,这样可以避免线程切换。
MainThread:事件响应函数会在Android应用的主线程(大部分情况下都是UI线程)中执行。
BackgroundThread:事件响应函数会在一个后台线程中执行。如果事件发布函数不是在主线程中,则会立即在事件发布线程中执行响应函数。如果事件发布函数在主线程中,EventBus则会在唯一的一个后台线程中按照顺序来执行所有的后台事件响应函数。
上面的3种事件响应函数,应该能够很快的执行完,不然的话会阻塞各自的事件发布。
async:事件响应函数在另外一个异步线程中执行。该线程和发布线程、主线程相互独立。如果事件响应函数需要较长的时间来执行,则应该使用该模式,例如 网络访问等。需要注意的是,由于系统并行的限制,应该避免在同一时间触发大量的异步线程。 EventBus使用一个线程池来提高线程的效率。
3. EventBus支持 Sticky Event
有时候某个事件可能会用到多次,比如在前面介绍Event Bus模型一文的示例中,最新的位置更新信息,可能需要多次用到,真对这种情况,您可以把该事件发布为Sticky Event,然后,当需要查询该信息的时候,可以通过Bus的getStickyEvent(ClasseventType) 函数来查询最新发布的Event对象。
同一类型的事件只保存最新的Event对象。
注册和发布事件的函数分别为 registerSticky(…) 和 postSticky(Object event)
在项目主页上还有和Otto之间性能对比的表格,以及性能测试的源码。
注意事项:
不管是生产者还是订阅者都需要向Bus注册自己:
bus.register(this);
在每个Activity或者Fragment的onResume和onPause函数中都需要调用bus.register(this)和bus.unregister(this)函数比较麻烦,可以通过一个Bus包装类来自动完成注册的工作,然后在类中只需要继承基类,并调用函数getScopedBus().register(…) 来注册需要的对象即可。详细情况参考示例代码:https://gist.github.com/3057437
使用示例:
onCreate()中注册bus:
//注册:三个参数分别是,消息订阅者(接收者),接收方法名,事件类
EventBus.getDefault().register(this,"setTextA",SetTextAEvent.class);
EventBus.getDefault().register(this,"setTextB",SetTextBEvent.class);
// EventBus.getDefault().register(this,"messageFromSecondActivity",SecondActivityEvent.class);
EventBus.getDefault().registerSticky(this, "messageFromSecondActivity", SecondActivityEvent.class);
EventBus.getDefault().register(this,"countDown",CountDownEvent.class);
对应event函数:
/**
* 与注册对应的方法名和参数,没有后缀,默认使用PostThread模式,即跟发送事件在同一线程执行
* @param event
*/
public void setTextA(SetTextAEvent event)
{
textView.setText("A");
}
public void setTextB(SetTextBEvent event)
{
textView.setText("B");
}
public void messageFromSecondActivity(SecondActivityEvent event)
{
textView.setText(event.getText());
}
/**
* 加Async后缀,异步执行。还有MainThread和BackgroundThread,分别是在主线程(UI)执行和后台线程(单一)执行
* @param event
*/
public void countDownAsync(CountDownEvent event)
{
for(int i=event.getMax();i>0;i--)
{
Log.v("CountDown", String.valueOf(i));
SystemClock.sleep(1000);
}
}
secondActivity中发送
//postSticky会缓存最新的event事件,不管接收方是否消亡,载入时都会检测最新状态
EventBus.getDefault().postSticky(new SecondActivityEvent("Message From SecondActivity"));
demo地址:
https://github.com/djun100/android-EventBus-demo
分享到:
相关推荐
EventBus是GreenRobot出品的Android系统的一个Event Bus类库,使用起来和之前我们所介绍的Square的Otto差不多,都是用来简化应用组件之间的通信。 使用介绍http://blog.chengyunfeng.com/?p=452
代码为博客的实例代码:http://blog.csdn.net/lmj623565791/article/details/41096639 有问题请博客留言
主要是通信组件EventBus,EventBus是一款针对Android优化的发布/订阅事件总线。 博客地址:http://blog.csdn.net/dickyqie/article/details/55101035
— 可以让两个组件相互通信,但是他们之间并不相互知晓。 基于事件总线管理/订阅/分发模式的。事件响应有更多的线程选择, EventBus可以向不同的线程中发布事件。EventBus支持 Sticky Event。 使用时需要先注册...
1.还在为Android各大组件之间通信设计通信繁琐的通信模式吗,还在为后台加载与前端更新而烦恼吗,eventbus总线事件控制,简单易懂!方便控制,赶快进阶吧!
使用EventBus 3.0 实现Activity之间,Activity与Service,Activity与Thread,Fragment与Fragment等各种组件的通信。EventBus 3.0的强大功能等你来探索。
EventBus**是一个Android端简化了应用程序内各组件间、组件与后台线程间的通信。
EventBus**是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信...
EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。
EventBus 3.0.0Jar包. EventBus是Android中组件与组件之间通信的框架,可以解耦和简化Activity与Activity、Activity和Fragment、Fragment和Fragment之间的通信。
EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦
EventBus是一种用于Android的发布/订阅事件总线。 优点: 简化应用组件间的通信; 解耦事件的发送者和接收者; 避免复杂和容易出错的依赖和生命周期的问题; 很快,专门为高性能优化过等等。
安卓 EventBus 使用示例,开发工具为eclipse+ADT,EventBus可简化安卓各个组件,线程之间的通信 相关博客 http://blog.csdn.net/qq_34763699/article/details/79467327
当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越难,如何优雅德解决这个问题,这个时候,就需要使用到EventBus.EventBus是GreenRobot出品的Android系统的一个Event Bus类库,...
它简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题,可以避免由于使用广播通信而带来的诸多不便。 引入 implementation 'org.greenrobot:eventbus:3.2.0' 最新版本可以去官网
EventBus是一种为了优化Android组件之间事件传递的解耦工具,通过发布/订阅事件总线来实现事件在不同组件之间的事件传递。 在EventBus 3之前,greenrobot团队因为考虑性能原因所以比较抵触使用注解框架。目前的...
这是一个Android平台的事件总线框架, 它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量。在往下看之前,你可以考虑...
02.项目组件通信流程 03.老版组件通信实践 04.封装库有何特点 05.如何使用该库Api 06.关于封装思路分析 07.关于其他知识点 08.关于添加混淆代码 09.关于几个重要问题 01.该库是做什么用的 组件之间的通信,接口+实现...
包含:网络请求okhttp,图片下载glide,数据库greenDAO,链式框架RxJava,组件路由ARouter,消息传递通信EventBus,热更新Tinker,插件化框架Replugin,文件下载FileDownloaer,图片选择PhotoPicker,图片滤镜毛玻璃...