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对象中获取观察者的方法和类,触发反射去调用到对应的方法。

results matching ""

    No results matching ""