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;
}
发现生产者和订阅者。
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;
}
相关文章推荐
- 打造自己的chrome for Android
- Android基础学习之SharedPreferences
- 《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码
- android学习:Android布局、用控件
- android权威编程指南学习笔记
- AndroidStudio(1 下载安装,环境搭建,使用设置)
- android权威编程指南学习笔记
- 《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码
- android外存文件读写
- android studio 快捷键(mac)
- 如何制作一个漂亮的 Android 应用图标
- 0923Android基础代码管理工具SVN
- Android Handler 用法解析
- Android Api Demos登顶之路(七十九)Graphics-->PathEffects
- Android中使用Movie显示gif动态图
- Android 设置图片 Bitmap任意透明度
- android:三种菜单(Menu)的设置
- Android中attr详解
- Android之手势的识别与处理(双击onDoubleTap、滑动onFling、拖动onScroll)
- Android中的Adapter 详解