浅谈ButterKnife对Android性能的影响
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性能的影响相关推荐
- 浅谈iOS和Android后台实时消息推送的原理和区别
http://www.52im.net/thread-286-1-1.html 前言 iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推 ...
- 浅谈设置父元素透明度不影响子元素透明度
浅谈设置父元素透明度不影响子元素透明度 筱葭 2017-03-15 10:50:00 11970 收藏 2 展开 设置父元素opacity:0.5,子元素不设置opacity,子元素会受到父元素o ...
- 浅谈“自动化技术对世界的影响”
目录 [简述] [视频列举] [浅谈感受] [简述] 目前做为某大学计算机系大一的一名学生,面对这个话题还处在一个认知短浅的阶段.接到此话题,我首先做了一些搜索工作,看到了一些关于此方面的视频,就此结 ...
- 浅谈移动端页面性能优化方案
众所周知,在互联网行业里,移动端占有的比例越来越高了,尤其实在电商领域,用户购物大部分在移动端.比如淘宝双11,在移动端支付的接近7成.这就要求我们产品质量越来越高,那对于我们前端工程师来说也是一个挑 ...
- 浅谈2023年Android开发技术趋势,什么值得学?
时光就像流水,无法挽留,转瞬即逝,今年已经是我从事Android开发的第5年了. 回首过去的几年间,Kotlin ,协程MVP , Hilt , MVVM , JetPack 相关热修复Flutter ...
- 浅谈一种Android客户端架构设计
技术发展日新月异,业界各种Android客户端架构设计,五花八门,但我们不能简单地说哪种架构更好,因为脱离业务谈架构是没有任何意义的,适合业务的才是好架构.而架构也不是一成不变的,随着业务的发展,也许 ...
- audio unity 加速_浅谈Unity中Android、iOS音频延迟
在Unity上面做音游,当在移动端实机运行起来,会发现,音频的发出会有一定的延迟,无论是长音效还是短音效,Unity内置的Audio内部使用的是FMOD,有以下手段改善 通过设置稍微改善其延迟的问题 ...
- 物理对计算机科学专业的意义,浅谈物理学对计算机科学发展的影响
摘 要:现今,计算机发展迅速,电子商务.电子政务.网上办公.网上学习和网上娱乐等活动应用普遍,这些依附于计算机发展而实现的功能给人类工作.生活.学习带来了翻天覆地的变化.作为理科基础学科的物理学在计算 ...
- 浅谈虚拟磁带库备份的性能问题
作者将本文同时发布到:EMC中文支持论坛 https://community.emc.com/community/support/chinese/brsw/blog/2013/08/27/%E6%B5 ...
最新文章
- JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
- 【职场】从算法工程师到主管的转变,需要改变的是什么
- sqlmap 进行sql漏洞注入
- vc++ cserialport 打开多个串口_STM32之USART串口
- mysql innodb文件_MySQL的InnoDB文件介绍
- cisco ios cookbook
- 世界八大最顶尖的工业软件强国
- 输电线缺陷检测 计算机工程与设计,工业CT检测与计算机深度学习
- 【腾讯TMQ】众测白皮书
- directadmin(DirectAdmin Extended)
- asp+access实现增删改查
- 广东海洋大学微型计算机控制技术,LCD显示实验(综合性)
- matlab学霸表白公式,学霸隐藏式表白数学公式
- html css 忽略,HTML与CSS中易被忽略的基础知识点
- Rod-cutting(动态规划)
- 最大子序列和问题c语言力扣,力扣
- 学习笔记19—dpabi错误集
- 【JAVA】生产者消费者模式
- 请你记住——《荒原的呼唤》选载之五
- 吃灰5年的iMac,今天才发现为啥那么卡。
热门文章
- Angularjs切换网站配色模式简单示例2(切换body元素的class)
- mkdir: Permission denied: user=root, access=WRITE
- 记录一次StackOverflowError问题
- c++和python有联系吗_Python和C++交互
- zabbix中mysql连不上的排错_zabbix监控软件的使用排错
- 学生信息管理系统的价值PHP,php技术对学生管理系统实现的价值研究
- uml 时序图_程序猿都应学习的语言:看 25 张图学 UML
- java中System类、String Builder类简介
- javascript中Date对象及方法
- 来及Java空间的传送门2