手把手教你实现Android编译期注解( 二 )


其次回顾一下前面我们编译期注解的开发流程以后,可以得出以下几点结论:

  • 编译期注解只能生成代码,但是不能修改代码;
  • 注解生成的代码 必须要手动被调用,他自己是不会被调用的;
  • 对于SDK的编写者来说,即使是编译期注解,往往也免不了至少要走一次反射,而反射的作用主要就是调用你注解处理器生成的代码 。
这里可能会有小伙伴问,既然编译期注解只能生成代码不能修改代码,那作用很有限啊,为啥不直接用类似于ASM 、Javassist 等字节码工具呢,这些工具不但可以生成代码而且还可以修改代码,功能更强劲 。因为这些字节码工具生成的直接是class,且写法复杂容易出错,也不易于调试,小规模写一下类似于防止快速点击之类的东西还可以,大规模开发第三方框架其实也挺不方便的,远远不如编译期注解来的效率高 。
此外,再仔细想想,我们前文中提到的编译期注解的写法做成第三方库给别人使用以后,还是需要使用者手动的在合适的时机调用一下 “init” 方法的,但是有些出色的第三方库可以做到连init方法都不需要使用者手动调用了,使用起来非常方便,这又是怎么做到的?其实也不难,多数情况都是这些第三方库用编译期注解生成了代码以后,再配合ASM等字节码工具直接帮你调用了init方法,从而让你免去手动调用的过程 。核心仍旧是编译期注解,只不过是用字节码工具省略了一步而已 。
【手把手教你实现Android编译期注解】到此这篇关于手把手教你实现Android编译期注解的文章就介绍到这了,更多相关Android编译期注解内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!