本教程是基于android studio 3.0+来实践的
demo项目源码
为什么要用编译时注解?因为运行时注解
是十分消耗资源的,Eventbus的低版本就是采用运行时注解,被吐槽效率低下,所以新版本的Eventbus都是采用编译时注解
注入的,其效率基本和直接写代码没什么区别
在整理思路之前,我们来了解一下,编译时注解和运行时注解
运行时注解
通常被定义的注解需要通过反射来获取相关值
编译时注解
在代码构建编译过程的时候,生成java文件然后供需要的类进行调用
两者根本区别在于,前者是程序员预先写好的java文件中,直接调用的,
而后者是程序员写好java代码的生成规则,程序员自己不写java文件,
交给编译器去写java文件,,java文件只有编译器编译完成后才能调用.
图解工程
第一点
app主工程
build.gradle中需要依赖lib.annotation,并且指定一个编译时注解器
dependencies {
annotationProcessor project(':lib.annotation.process') //指定注解器(图中的3)
implementation project(':lib.annotation') //依赖注解类工程(图中2)
}
解析:当gradle运行编译的时候,会进入到lib.annotation.process工程中,对整个app工程使用了lib.annotation工程的java文件进行检索,结果会在lib.annotation.process.AbstractProcessor.process
方法中回调,最后process结束后将编译出来的java代码输入到app工程的build.generated.source.apt.debug.*
中,到此为止,编译出来的java代码就跟自己创建的java文件一样调用
第二点
lib.annotation是一个java library工程,,注意,是java libra