分析ButterKnife对性能的影响

一 简介

ButterKnife是大神JakeWharton开源的View依赖注入框架,使用注解就可以完成View的查找,简化了代码的书写。有人担心项目中使用ButterKnife会对性能有影响,但又有人说ButterKnife使用了APT故不影响性能,事实到底如何?实现原理面前,一切都是透明的。

二 ButterKnife实现原理

2.1 注解处理

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

2.2 ButterKnife.bind过程

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

Paste_Image.png

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

Paste_Image.png

可以知道,该方法有两个影响性能的地方,就是Class.forName和viewBindingClass.newInstance这两个方法。ButterKnife对此进行了一些优化,使用静态Map进行缓存,但是第一次查找的时候的性能影响是免不了的。

三 结论

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 163,984评论 24 696
  • 转载于:[http://blog.csdn.net/chenkai19920410/article/details...
    双鱼大猫阅读 321评论 0 5
  • 俗话说的好“不想偷懒的程序员,不是好程序员”,我们在日常开发android的过程中,在前端activity或者fr...
    蛋西阅读 4,724评论 0 14
  • 仍记得那年的雨天 一把伞 一个我 还有一个你 从那天起 两小无猜的我们 被时间分隔 被地域分割 而后的再相遇 你对...
    e016c196bd07阅读 76评论 0 0
  • 日志定位问题,命令走你 grep '2017091900158008000000126313' *.log >> ...
    黑色蜘蛛侠阅读 97评论 0 0
  • 一个个吵着说城市套路深,都想回农村 ! 现在机会来了,朋友们!6月1号为了让城里的朋友们体验农村生活,即日起开始预...
    夕柏玟阅读 119评论 13 11
  • 以上的歌词,确实有很大的触动,写下这篇文章,只是给自己看的。表达自己的态度。 像我这样的人,我是一个怎么样的人?做...
    若与阅读 196评论 0 5