eventbus模块
观察者模式的实现,它的设计涉及到3个部分:
- 监听者,在监听者中实现一个被
@Subscribe
注解的方法 - 通信数据的结构体
- 被观察者将数据post出去
一个简单的示例:
// 观察者
public class EventListener {
public int lastMessage = 0;
@Subscribe
public void listen(OurTestEvent event) {
lastMessage = event.getMessage();
}
public int getLastMessage() {
return lastMessage;
}
}
// 数据对象
public class OurTestEvent {
private final int message;
public OurTestEvent(int message) {
this.message = message;
}
public int getMessage() {
return message;
}
}
// 被观察者
EventBus eventBus = new EventBus("test");
EventListener eventListener = new EventListener();
eventBus.register(eventListener);
eventBus.post(new OurTestEvent(200));
上面的代码的回调是post处于什么线程,那么lister就是在什么线程下运行。并且这个是阻塞的,如果需要异步的回调,那么可以使用AsyncEventBus
。
基本的原理
EventBus的核心就是反射。
register
解析出listener中注解了观察者的方法,将需要的信息存入到Subscriber
对象中。
post
从Subscriber
对象中获取观察者的方法和类,触发反射去调用到对应的方法。