开源框架相关面试问题-butterknife注解框架面试问题讲解
butterknife使用简介:
它的出现主要是为了解决咱们在android开发中会写大量的findViewById()、setOnClickListener()这样的索然无味的代码,其实它就是一个依托Java的注解机制来实现辅助代码生成的框架,下面来看一下它的简单使用:
1、绑定一个View:
相比其它注入框架,一般都是采用反射机制,但是一提到反射就会有性能问题,而butterknife则不一样,它采用编译时再生成的机制来执行view的查找,因为不用太过担心性能问题。
2、给View添加相应的事件:
在最后还得在onCreate()中执行关键的一句代码,如下:
butterknife原理:
在分析它的原理之前,先了解一下Java的注解处理:
也就是在编译期间就已经处理好了各个view的初始化和相应的点击事件,而不是在运行期间去做的,这个是区别于其它的注入框架。
下面从butterknife.bind()方法开始分析其原理:
下面总结一下它的整个过程:
1、开始它会扫描Java代码中所有的bufferknife注解。
2、ButterKnifeProcessor -> <className>$$ViewBinder:通过ButterKnifeProcessor会生成一个新的java类。
3、调用bind方法加载生成的ViewBinder类。
另外还需要注意:
因为如果是private的话那就只能采用反射方式来处理了,那就会影响性能。
开源框架相关面试问题-butterknife注解框架面试问题讲解的更多相关文章
- Android ButterKnife注解框架使用
这段时间学习了下ButterKnife注解框架,学习的不是特别深入,但是基础也差不多了,在此记录总结一下. ButterKnife是一个Android View注入的库,主要是注解的使用,可以减少很多 ...
- ButterKnife注解框架详解
Android 懒人注解框架 :https://github.com/JakeWharton/butterknife 前言: 注解,相信很多同学都用到了,对控件进行初始化的时候需要用到 findVie ...
- Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny
首先提下ButterKnifey已经更新到版本7.0.1了,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义.同时注册的方式也从 ButterKnife.inject(this ...
- Android注解框架实战-ButterKnife
文章大纲 Android注解框架介绍 ButterKnife实战 项目源码下载 一.框架介绍 为什么要用注解框架? 在Android开发过程中,我们经常性地需要操作组件,操作方法有findVie ...
- 注解框架---AndroidAnnotations
AndroidAnnotations是一个开源框架,旨在加快Android开发的效率.通过使用它开放出来的注解api,你差点儿可以使用在不论什么地方, 大大的降低了无关痛痒的代码量,让开发人员可以抽身 ...
- java注解框架
我们经常会在java代码里面看到:“@Override”,“@Target”等等样子的东西,这些是什么? 在java里面它们是“注解”. 下面是百度百科的解释:java.lang.annotation ...
- Java注解 框架开发之Java注解的妙用
原文出处: locality 注解的好处: 1.能够读懂别人写的代码,特别是框架相关的代码. 2.本来可能需要很多配置文件,需要很多逻辑才能实现的内容,就可以使用一个或者多个注解来替代,这样就使得编程 ...
- java 编译时注解框架 lombok-ex
lombok-ex lombok-ex 是一款类似于 lombok 的编译时注解框架. 编译时注,拥有运行时注解的便利性,和无任何损失的性能. 主要补充一些 lombok 没有实现,且自己会用到的常见 ...
- 企业面试问题收集-ssh框架
SSH框架阶段 SSH的优缺点,使用场景? Hibernate优缺点 Hibernate优点:(1) 对象/关系数据库映射(ORM)它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全 ...
随机推荐
- python-Web-django-商城-购物车商品加减
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 开发 --- IDE及小工具
django-debug-toolbar 介绍: django-debug-toolbar 是Django调试工具条,提供了各种信息的获取,拥有极强的调试功能. 官网: https://django- ...
- 安装networking-sfc
申明: 主参考:https://docs.openstack.org/networking-sfc/queens/ 辅参考: https://blog.csdn.net/linshenyuan1213 ...
- 动态加载js不执行解决办法
这个问题的产生原因是:我们项目有一个主index文件,在主index文件中需要根据参数来判断是加载pc.html的内容还是加载mobile.html的内容,一开始是使用jquery来做的,没有问题,后 ...
- [AcWing30]正则表达式匹配
[AcWing30]正则表达式匹配 请实现一个函数用来匹配包括'.'和'*'的正则表达式. 模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次). 例如,字符串&quo ...
- Kefa and Dishes(CodeForces580D)【状态压缩DP】
状态压缩DP裸题,比赛的时候没反应过来,进行了n次枚举起点的solve,导致超时. #include<cstdio> #include<iostream> #include&l ...
- vue使用axios进行ajax请求
以前都用resource进行ajax请求,现在官方推荐使用axios,所以现在更换插件.这篇文章主要描写如何在项目中引入axios以及简单地使用axios进行ajax请求. 第一步,需要通过npm安装 ...
- 阿里云自动获取token值(python)
一,token说明 token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识.当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个 ...
- id和class的区别
id和class是定义css样式用到的,不同的是定义样式时的写法不一样,使用id选择样式时,定义的格式为 #main{width:20px;} ,使用class时用到的是 .main{width:20 ...
- sql使用临时表循环
code CREATE PROCEDURE sp_Update_Blogger_Blog_ArticleCount AS BEGIN declare @account varchar(); --博主账 ...