功能说明:模块间的高效通信并解耦。
一:EventBus
GitHub地址与使用方法:https://github.com/greenrobot/EventBus
使用基本步骤(Android Studio为例)
1.build.gradle里面添加依赖
dependencies {
compile 'org.greenrobot:eventbus:3.0.0'
}
2.注册与注销
EventBus.getDefault().register(this);
EventBus.getDefault().unregister(this);
3.定义接收消息的方法
/**
* 1.需要使用注解@Subscribe,如果没有使用注解,会报错
* 2.与方法名无关
* 3.参数自己设置,可以是自定义的JavaBean
* @param
*/
@Subscribe
public void onEventaaa(Object object) {
if (object instanceof EventData) {
Log.i(TAG, "EventBusMainActivity onEventaaa:" + ((EventData)object).getContent());
}
}
@Subscribe
public void onEventbbb(EventData eventData) {
Log.i(TAG, "EventBusMainActivity onEventbbb:" + eventData.getContent());
}
4.发送消息
/**
* 参数自己定义,如果接收方法的类型与post的参数类型不一致,是不会接收到消息的
*/
EventBus.getDefault().post(eventData);
一:OTTO
Otto GitHub地址
使用基本步骤(Android Studio为例)
1.build.gradle里面添加依赖
dependencies {
compile 'com.squareup:otto:+'
}
2.实例化Bus,可以使用一个单例。
public class BusProvider {
private volatile static Bus bus = null; //使用volatile来修饰多线程访问变量的情况
private BusProvider(){
}
public static Bus getInstance(){
if(bus == null){
synchronized (BusProvider.class) { //加上sunchronized来防止并发
if (bus == null) {
bus=new Bus();
}
}
}
return bus;
}
}
3.注册与注销
BusProvider.getInstance().register(this); //注册事件
BusProvider.getInstance().unregister(this); //取消订阅
4.定义接收消息的方法
和EventBus用法类似
@Subscribe
public void subscribeEvent(EventData data){
Log.i(TAG, "OTTOMainActivity subscribeEvent:" + data.getContent());
}
5.发送消息
和EventBus用法类似
但是多了一个注解@Produce
public void sendMsg() {
EventData eventData = new EventData();
eventData.setContent("test msg");
BusProvider.getInstance().post(eventData);
}
/**
* 必须要有返回值,当其他地方注册的时候,会立马回调该方法
* @return
*/
@Produce
public EventData providerEvent(){
String content = "hello world from OTTOMainActivity";
EventData eventData = new EventData();
eventData.setContent(content);
return eventData;
}
总结:
EventBus和Otto较为类似,相对于BroadcaseReceiver,用法更加简单,效率高而且资源消耗低。但是也不能完全替代BroadcaseReceiver的功能,BroadcaseReceiver还具备多个APP间通讯的功能,所以怎样选择还是视情况而定。
参考:
Android学习系列(43)–使用事件总线框架EventBus和Otto
demo地址:
GitHub:https://github.com/gaoshiqi/EventTest