ButterKnife解析

自从引入了ButterKnife,再也不用频繁的findViewById了,也不用手动setOnClickListener了。此框架小而精致,实乃提高开发效率之必备良品。

ButterKnife的注解都是应用于编译期(Class)的,使用ButterKnife不会影响性能,运行期就没什么关系了.

ButterKnife核心原理是在编译期会为每个使用ButterKnife注解的文件生成一个_ViewBinding关联文件,在这个文件相当于一个工具类,我们调用ButterKnife.Bind方法时,会执行这个文件中类的构造方法,帮助我们进行findViewById和强转操作.

每次进行bind操作会生成一个_ViewBinding的对象(也就是返回的unbinder),这个对象持有对当前类的引用,不过这两者是相互引用,Unbind方法也只是简单的将当前类对View的引用置空,所以不解绑并不会造成内存泄漏问题。

在Activity中使用unbind其实有点多余,反正Activity生命周期结束了,也就不再被引用的时候,整个Activity和View会被一起回收.

在Fragment中使用解绑操作,是因为Fragment不在活跃的时候,可以及时回收View,降低内存消耗,这也是因为Fragment是属于轻量级的组件,但是,我们通常使用Fragment没必要每次切换都要回收和重建,所以也就不用解绑.

ButterKnife中有一个缓存map集合:

1
static final Map<Class<?>, Constructor<? extends Unbinder>> BINDINGS = new LinkedHashMap<>();

这个集合用来缓存_ViewBinding的构造器,便于类的快速实例化。

android-apt(Annotation Processing Tool)

Annotation processing 是javac中用于编译时扫描和解析Java注解的工具

android-apt:

  • 能在编译时期去依赖注解处理器并进行工作,但在生成 APK 时不会包含任何遗留的东西
  • 能够辅助 Android Studio 在项目的对应目录中存放注解处理器在编译期间生成的文件
代码生成

应用javaPoet框架自动生成代码

apt+javaPoet目前也是应用比较广泛,在一些大的开源库,如EventBus3.0+,页面路由 ARout、Dagger、Retrofit等均有使用的身影

文章目录
  1. 1. android-apt(Annotation Processing Tool)
  2. 2. 代码生成
|