
鸿蒙版ButterKnife
目的
实现鸿蒙版本的ButterKnife,能实现控件注入,减少重复代码的编写。
实现方式
本质上是注入,可以选择运行期注入,或者编译期注入。运行期注入基于的技术主要是Runtime-Annotation和反射,编译期注入基于Class-Annotation和APT。APT是属于Java的技术,并不是只有在Android才能用,理论上在鸿蒙上也是行的通的。
运行期注入
注解声明
绑定控件的注解:
点击控件的注解:
绑定界面布局的注解:
上面三种的注解都是RetentionPolicy.RUNTIME,表示会在程序运行期生效。
注入代码:
反注入代码:
举例处理绑定控件注释:
代码就是扫描目标实例中所有属性,将被@BindView修饰的属性找出来处理,一样是通过findComponentById找个控件实例,再用反射技术把控件实例设置回去。 至此,注入工作就完成了。
使用代码:
代码运行正常,V1版本完成。Android早期也会不少开源的注入框架是基于这个技术实现的,还是比较简单的。当然这并不是本文的重点,考虑到Android版的ButterKnife采用的APT的方式注入,所以我们来试一试。
编译期注入
APT技术介绍
APT全称Annotation Processing Tool,即编辑器注解处理技术。APT技术会在代码编译的时候处理注解,自动生成一些通用代码,这样就可以大大减轻开发中重复性的工作,即提高的工作效率,也让代码看上去比较简洁。在Android领域,APT的运行非常广泛,比如ButterKnife,ARouter等开源框架都是用到了这项技术。
APT注入开发步骤
声明编译期注解,还是用绑定控件举例
创建一个注解处理的模块,模块配置如下
创建自定义注解处理器
自定义的注解处理类,需要继承AbstractProcessor,主要重写4个方法:
创建注入Api
使用
总结工作执行流程
当我们执行build编译的时候,会先在entry/build/generated/sources/...生成一个java文件,如下
然后执行注入的时候,会根据命名规则得到自动生成java类的类名,然后反射获取实例:
执行bind方法完成注入:
最后让我们把代码跑起来检验成果,代码运行在P40上一切正常,至此注入V2版本大功告成。
总结
注入的方式可以大大简化开发工作,代码也易于维护,运行期注入会因为大量反射消耗一点性能,编译器注入自运行的时候基本不影响性能,但是编译时可能时间会长点。总体来说,推荐使用V2版本来注入,V2版本才是真正的鸿蒙版ButterKnife。
相关链接
Github:https://github.com/loubinfeng2013/HarmonyTools
作者:暗影萨满
