EventBus的学习记录
EventBus核心跨各种组件实现的通信,核心是反射调用方法;
四个核心类
EventBus:管理类,用来维护注册的类用Subscribe标注的方法,最后调用用参数匹配
Subscribe:标注类,用来标注哪些方法是EventBus的回调,用参数来区分需不需要调用
ThreadMode:线程模式,用来区分返回的方法在子线程还是主线程运行
SubscribeMethod:保存在EventBus内的方法
安卓标注类
在项目中经常用到注解,但是对一些注解还是一知半解
学习一下注解及代表的含义 @Retention、@StringDef深刻体会到注解的好处!在此记录一下:
@Retention注解:字面意思是保留,是java 5 新增特性枚举类,有人说他是数据类型也没错。因为它是一种特殊的数据类型,
之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了
枚举类型的简洁性、安全性以及便捷性。
这三个属性CLASS,RUNTIME,SOURCE;
CLASS : 编译器要丢弃的注释、被编译器忽略!
RUNTIME : 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
SOURCE : 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。这是默认的行为。
注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,没有加,则等于没有任何标记
以后,javac编译器、开发工具和其他程序可以通过反射来了解你的类及各种元素上有无何种标记,
看你的程序有什么标记,就去干相应的事,标记可以加在包、类,属性、方法,方法的参数以及局部变量上。
EventBus在register的时候,会通过反射遍历注册类的所有方法,把其中的Subscribe标注的方法用Map保存起来,在post的时候就会遍历方法,通过参数去匹配,符合的就调用,从而实现跨组件通信的目的