EventBus 3.0详解
来源:互联网 发布:88读书网软件 编辑:程序博客网 时间:2024/06/05 15:22
EventBus 3.0修改了以前版本用特定名称标记event接收者的方法,改用注解标示 event 接收者。
该注解为 @Subscribe.简单分析了一般流程和部分UML类图。
使用
参考 https://github.com/greenrobot/EventBus
Define events:
public class MessageEvent { /* Additional fields if needed */ }
Prepare subscribers: Register your subscriber (in your onCreate or in a constructor):
eventBus.register(this);
Declare your subscribing method:
@Subscribe public void onEvent(AnyEventType event) {/* Do something */};
Post events:
eventBus.post(event);
原理
订阅类(Subscriber)和方法(Method),以及事件( Event)的封装。
Subscriber指的是接收事件的类,比如 EventBus.getDefault().register(this) 中 this 对象对应的类。
读取 注解 @Subscribe 对应的信息,将该方法(Method对象)封装成:SubscribeMethod.
将Subscriber 和 SubscribeMethod 封装成 Subscription类。
具体封装见 图1
subscriber, method, event 在 EventBus 中map的维护。
在 EventBus 中维护着两个重要的map:
private final Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType; private final Map<Object, List<Class<?>>> typesBySubscriber;subscriptionsByEventType, key 为 eventtype对应的class, entry 为该event的接收者对应的List。
typesBySubscriber, key 为接收 event 对应的类(Subscriber,即register(this)中的this),entry为该类所接受的事件List(event)
接收事件的方法的线程(ThreadMode)
ThreadMode内容可以从注解 Subscribe 读取。有四种mode:
public enum ThreadMode { POSTING, // 订阅方法在当前线程执行 MAIN, // 订阅方法在主线程之行 BACKGROUND, // 订阅方法在后台线程执行,分2中情况:1是post线程为主线程2 post线程不为主线程 ASYNC // 新建线程处理该事件}
图解
图 1
0 0
- EventBus 3.0 使用详解
- EventBus 3.0使用详解
- EventBus 3.0使用详解
- EventBus 3.0详解
- EventBus 3.0的用法详解
- EventBus 3.0的用法详解
- EventBus 3.0的用法详解
- EventBus 3.0的用法详解
- EventBus 3.0的用法详解
- EventBus 3.0的用法详解
- EventBus详解
- EventBus详解
- EventBus详解
- EventBus详解
- EventBus详解
- EventBus详解
- EventBus详解
- EventBus详解
- [学习笔记] 微信公众平台 · 小程序 · 组件
- Framework Manager -- Model Advisor
- Ping++支付的封装
- python解一元方程
- Unity3d 编写编辑器自定义插件(2)
- EventBus 3.0详解
- CSDN博文精选 微信小程序全方位解析
- eclipse安装zookeeper插件
- 输入一段文字,计算其包含的字符总数
- 安卓的Activity 之间的传值
- MVC、MVP、MVVM 初探(二)--- MVP模式
- oracle:分析函数(评级函数、窗口函数等)
- Android自制弹幕
- Hdu 5514 类莫比乌斯函数 容斥原理