解释一下反射:
JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
EventBus核心流程图总结:
发布者post发送一个事件,处理器根据发布的数据类型,然后分配给订阅者方法回调里面。
- 先注册
- 通过反射拿到所有的这个类的方法
- 判断这个类有没有注解,然后存起来。
- 然后获取到注解的值来判断需不需要转换线程
- 在post方法里面通过反射,调用这个类方法。
第一步: 声明Subscribe注解
/**
* @Retention 用于声明该注解生效的生命周期,有三个枚举值可以选择<br>
* 1. RetentionPolicy.SOURCE 注释只保留在源码上面,编译成class的时候自动被编译器抹除
* 2. RetentionPolicy.CLASS 注释只保留到字节码上面,VM加载字节码时自动抹除
* 3. RetentionPolicy.RUNTIME 注释永久保留,可以被VM加载时加载到内存中
* 注意:由于我们的目的是想在VM运行时对Filed上的该注解进行反射操作,因此Retention值必须设置为RUNTIME
*
* @Target 用于指定该注解可以声明在哪些成员上面,常见的值有FIELD和Method,
由于我们的当前注解类是想声明在Filed上面
* 因此这里设置为ElementType.