您的位置:首页 > 移动开发 > Android开发

android 事件总线 -- Otto(四) HandlerFinder、DeadEvent

2015-09-24 20:56 513 查看
1.HandlerFinder

发现生产者和订阅者。

HandlerFinder本身是一个接口(interface),该接口中有两个接口方法:

// 发现所有的生产者
Map<Class<?>, EventProducer> findAllProducers(Object listener);
// 发现所有的订阅者
Map<Class<?>, Set<EventHandler>> findAllSubscribers(Object listener);

发现所有的生产者和订阅者,将获取到的所有的生产者或订阅者放到Map集合中。由于生产者和订阅者的关系是一对多的关系,也就是说一个生产者可以有多个订阅者,所以在发现所有的生产者中Map里面存的只是一个EventProducer(事件生产者),而发现所有的订阅者的Map里面存的则是集合Set<EventHandler>。
在HandlerFinder中还有一个接口内部类:

HandlerFinder ANNOTATED = new HandlerFinder() {
@Override
public Map<Class<?>, EventProducer> findAllProducers(Object listener) {
return AnnotatedHandlerFinder.findAllProducers(listener);
}

@Override
public Map<Class<?>, Set<EventHandler> > findAllSubscribers(Object listener) {
return AnnotatedHandlerFinder.findAllSubscribers(listener);
}
};

2.DeadEvent
包裹一个已经提交的但是由于没有订阅者而不能发出的事件。

这个类中有两个全局静态变量:

public final Object source;
public final Object event;

其中event保存的是不能交付的事件,source保存的是产生event的来源(一般在Bus类中)。
还有一个带参数的构造方法:

/**
* Creates a new DeadEvent.
*
* @param source object broadcasting the DeadEvent (generally the {@link Bus}).
* @param event the event that could not be delivered.
*/
public DeadEvent(Object source, Object event) {
this.source = source;
this.event = event;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: