EventBus 及一些思考
公子姓王 人气:1
EventBus 是 Android 开发的一种常用框架,其解耦的思维令人赞叹
从特性上来讲,其与 Android SDK中的BroadcastReceiver很像,二者都是注册,发送事件,反注册,都可以定义事件的优先级,且都只是粘性(sticky)事件,只是EventBus 使用起来简单得多,而且不能跨进程
> Android SDK其实也有一个不能跨进程的BroadcastReceiver机制,——LocalBroadcastManager,其发送和接受的广播只能在本进程,相比传统的 registerBroadcastReceiver,其有着更高的安全性,与EventBus的相似度也更高
关于 EventBus 基础,请参考:
[EventBus](https://github.com/greenrobot/EventBus)
[使用教程](https://juejin.im/post/5a3a0caa518825258b742968) [高级用法](https://juejin.im/post/5a3b8fe15188252103346d1b) [源码解析](https://juejin.im/post/5a3e19c26fb9a0452207b6b5)
这里结合源码,记录几个在 EventBus 学习和使用中值得思考和注意的地方:
**注册**
1. 哪些方法会被注册 ?
2. 多次注册同一对象会如何?
3. 注册没有被 @Subscribe 注解的方法的对象会如何 ?
4. 注册时父类中被 @Subscribe 注解的方法会被注册吗?
5. 如果父类A 的方法 b 订阅了this,子类B重写了该方法,注册子类B 的对象会发生什么?
上述问题,我们需要分析 register方法:
```java
public void register(Object subscriber) {
Class subscriberClass = subscriber.getClass();
// 1. 找 subscriber 中被需要被注册的方法
List
加载全部内容