一、介绍
EventBus出自greenrobot,和之前的GreenDao是同一家,现在最新版本是3.0,。它主要是针对Android优化的发布/订阅 事件总线。主要是代替Intent、Handler、BroadCa在个个组件(Activity、Fragment、Service)之间的传递。
官方文档:http://greenrobot.org/eventbus/
它的流程为:
主要是为了优化发布/订阅时间总线,可以:
1.简化组件之间的通信
2.解耦事件发送者和接受者
3.对activity,fragment和后台线程表现良好
4.避免复杂和容易出错的依赖关系和生命周期问题
5.很快专门针对高性能进行优化
6.代码质量<50k
7.具有传送线程,用户优先级等高级功能
主要角色:
1.Event传递的事件对象
2.Subscriber 事件的订阅者
3.Publisher 事件的发布者
4.ThreadMode 定义函数在何种线程中执行
注:ThreadMode总共有四个
1.Main UI线程
2.BACKGOUND 后台线程
3.POSTING 和发布者处在同一线程
4.ASYNC 异步线程
二、使用
1.导入库
compile 'org.greenrobot:eventbus:3.0.0'
2.定义一个事件对象
public class EventMessage { public String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
3.注册/解除订阅
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
4.发布事件
EventMessage e=new EventMessage();
e.setMessage("hello EventBus3.0.0");
EventBus.getDefault().post(e);
5.处理订阅事件
@Subscribe(threadMode=ThreadMode.MAIN)
public void onEventMessage(EventMessage eventMessage){
tvEvent.setText(eventMessage.message);
}
这就是一般是使用流程,其实还有很多使用,比如:
1.类似广播的优先级(priority)
@Subscribe(threadMode=ThreadMode.MAIN,priority = 200)
public void onEventMessage(EventMessage eventMessage){ tvEvent.setText(eventMessage.message); }//在ui线程执行 优先级200
2.终止事件传递
EventBus.getDefault().cancelEventDelivery(event) ;//优先级高的订阅者可以终止事件往下传递
推荐比较好的博客:
http://blog.csdn.net/o279642707/article/details/70854642
我自己写的一个小demo:
http://download.csdn.net/download/u010074054/9964508
如果有写的不对的或者补充的,希望大家多多指点出来,谢谢!!!