天天看点

浅谈ButterKnife对Android性能的影响

二 butterknife实现原理

2.1 注解处理

对于使用butterknife注解的类,都会生成实现viewbinder接口名称原类名+$$viewbinder的相应辅助类。这个过程处于编译期间,也就是我们apt在编译时处理注解生成的。由此可知,对运行时的性能,这个阶段是没有影响的。

2.2 butterknife.bind过程

编译期生成的辅助类,想要完成绑定view,还需要一个bind的过程。源码如下:

浅谈ButterKnife对Android性能的影响

paste_image.png

可以看到,bind分为两个步骤。一个是找到注解处理器生成的辅助类,一个就是android原本的findviewbyid过程。第二步就不用说了,性能影响主要是看第一步。

findviewbinderforclass方法如下:

浅谈ButterKnife对Android性能的影响

可以知道,该方法有两个影响性能的地方,就是class.forname和viewbindingclass.newinstance这两个方法。butterknife对此进行了一些优化,使用静态map进行缓存,但是第一次查找的时候的性能影响是免不了的。

三 结论

通过原理分析,结论显而易见。butterknife对性能有一定的影响,并且引入了更多的类和方法,增加了安装包的大小。但是,对开发效率的提升也是显而易见的,尤其是配合as插件的使用。如何取舍,完全是由作为开发者的你来决定了。

继续阅读