Event Bus
EventBus 是一个Android和Java的开源库,使用发布者/订阅者模式进行松耦合。 EventBus支持集中通信,只需几行代码就可以解耦类——简化代码,消除依赖关系,加快应用程序开发。
优点
-
简化了组件之间的通信
-
分离事件发送方和接收方
-
使用UI工件(例如活动、片段)和后台线程表现良好
-
避免复杂和容易出错的依赖关系和生命周期问题
-
快;专为高性能而优化
-
很小(< 50 k jar)
-
1亿+安装的应用程序在实践中证明了这一点
-
具有高级特性,如交付线程、订阅服务器优先级等。
快速开始
maven 引入
<dependency>
<groupId>org.greenrobot</groupId>
<artifactId>eventbus</artifactId>
<version>3.1.1</version>
</dependency>
定义
- MessageEvent.java
信息的载体,最基础的 Java 类
public class MessageEvent {
private final String message;
public MessageEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
- EventService.Java
这个类,使用了 @Subscribe
指定监听方法,且指定了注册监听和取消监听的方法。
备注
上述方法的指定,在 Event3 中,对方法名称无要求。
public class EventService {
/**
* This method will be called when a MessageEvent is posted
* @param event 事件
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
System.out.println("on message of event"+event.getMessage());
}
/**
* 开始监听
*/
public void startListen() {
EventBus.getDefault().register(this);
}
/**
* 停止监听
*/
public void stopListen() {
EventBus.getDefault().unregister(this);
}
}
- Main.java
public class Main {
public static void main(String[] args) {
MessageEvent event = new MessageEvent("Event bus msg");
EventService eventService = new EventService();
eventService.startListen();
System.out.println("Start Listen...");
EventBus.getDefault().post(event);
EventBus.getDefault().post(event);
System.out.println("Stop Listen...");
eventService.stopListen();
EventBus.getDefault().post(event);
}
}
测试结果:
Start Listen...
on message of eventEvent bus msg
on message of eventEvent bus msg
Stop Listen...
[FINE] No subscribers registered for event class com.github.houbb.jdk.eventbus.domain.MessageEvent
[FINE] No subscribers registered for event class org.greenrobot.eventbus.NoSubscriberEvent