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插件的使用。如何取舍,完全是由作为开发者的你来决定了。

浅谈ButterKnife对Android性能的影响相关推荐

  1. 浅谈iOS和Android后台实时消息推送的原理和区别

    http://www.52im.net/thread-286-1-1.html 前言 iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推 ...

  2. 浅谈设置父元素透明度不影响子元素透明度

    浅谈设置父元素透明度不影响子元素透明度 筱葭 2017-03-15 10:50:00  11970  收藏 2 展开 设置父元素opacity:0.5,子元素不设置opacity,子元素会受到父元素o ...

  3. 浅谈“自动化技术对世界的影响”

    目录 [简述] [视频列举] [浅谈感受] [简述] 目前做为某大学计算机系大一的一名学生,面对这个话题还处在一个认知短浅的阶段.接到此话题,我首先做了一些搜索工作,看到了一些关于此方面的视频,就此结 ...

  4. 浅谈移动端页面性能优化方案

    众所周知,在互联网行业里,移动端占有的比例越来越高了,尤其实在电商领域,用户购物大部分在移动端.比如淘宝双11,在移动端支付的接近7成.这就要求我们产品质量越来越高,那对于我们前端工程师来说也是一个挑 ...

  5. 浅谈2023年Android开发技术趋势,什么值得学?

    时光就像流水,无法挽留,转瞬即逝,今年已经是我从事Android开发的第5年了. 回首过去的几年间,Kotlin ,协程MVP , Hilt , MVVM , JetPack 相关热修复Flutter ...

  6. 浅谈一种Android客户端架构设计

    技术发展日新月异,业界各种Android客户端架构设计,五花八门,但我们不能简单地说哪种架构更好,因为脱离业务谈架构是没有任何意义的,适合业务的才是好架构.而架构也不是一成不变的,随着业务的发展,也许 ...

  7. audio unity 加速_浅谈Unity中Android、iOS音频延迟

    在Unity上面做音游,当在移动端实机运行起来,会发现,音频的发出会有一定的延迟,无论是长音效还是短音效,Unity内置的Audio内部使用的是FMOD,有以下手段改善 通过设置稍微改善其延迟的问题 ...

  8. 物理对计算机科学专业的意义,浅谈物理学对计算机科学发展的影响

    摘 要:现今,计算机发展迅速,电子商务.电子政务.网上办公.网上学习和网上娱乐等活动应用普遍,这些依附于计算机发展而实现的功能给人类工作.生活.学习带来了翻天覆地的变化.作为理科基础学科的物理学在计算 ...

  9. 浅谈虚拟磁带库备份的性能问题

    作者将本文同时发布到:EMC中文支持论坛 https://community.emc.com/community/support/chinese/brsw/blog/2013/08/27/%E6%B5 ...

最新文章

  1. JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
  2. 【职场】从算法工程师到主管的转变,需要改变的是什么
  3. sqlmap 进行sql漏洞注入
  4. vc++ cserialport 打开多个串口_STM32之USART串口
  5. mysql innodb文件_MySQL的InnoDB文件介绍
  6. cisco ios cookbook
  7. 世界八大最顶尖的工业软件强国
  8. 输电线缺陷检测 计算机工程与设计,工业CT检测与计算机深度学习
  9. 【腾讯TMQ】众测白皮书
  10. directadmin(DirectAdmin Extended)
  11. asp+access实现增删改查
  12. 广东海洋大学微型计算机控制技术,LCD显示实验(综合性)
  13. matlab学霸表白公式,学霸隐藏式表白数学公式
  14. html css 忽略,HTML与CSS中易被忽略的基础知识点
  15. Rod-cutting(动态规划)
  16. 最大子序列和问题c语言力扣,力扣
  17. 学习笔记19—dpabi错误集
  18. 【JAVA】生产者消费者模式
  19. 请你记住——《荒原的呼唤》选载之五
  20. 吃灰5年的iMac,今天才发现为啥那么卡。

热门文章

  1. Angularjs切换网站配色模式简单示例2(切换body元素的class)
  2. mkdir: Permission denied: user=root, access=WRITE
  3. 记录一次StackOverflowError问题
  4. c++和python有联系吗_Python和C++交互
  5. zabbix中mysql连不上的排错_zabbix监控软件的使用排错
  6. 学生信息管理系统的价值PHP,php技术对学生管理系统实现的价值研究
  7. uml 时序图_程序猿都应学习的语言:看 25 张图学 UML
  8. java中System类、String Builder类简介
  9. javascript中Date对象及方法
  10. 来及Java空间的传送门2