Butterknife总结

Butterknife用途

Butterknife的作用是减少code,不用再写很多findViewById, setOnClickListener.
它不会提高代码执行效率,但是可以提高程序员的效率。而且Butterknife产生的代码是java源代码,而不是字节码,便于调试。

Butterknife流程

  1. 在编译阶段,apt会扫描java代码中所有的注解,比如@Bind, @Click等等。
  2. 当发现一个类中包含了这些注解,Butterknife会产生一个java类,名字为<className>$$ViewBinder。这个类包含了findViewById, setOnClickListener等代码。
  3. 在程序运行时,通过ButterKnife.bind(this), 利用刚才产生的代码完成注入。

Butterknife原理

Butterknife是注入框架的一种。一般的注入框架使用的runtime annotation。在运行的时候通过反射完成注入。这种方式比较简单直接,但是反射会影响性能。反射本身效率不高,同时产生大量临时变量,增加了GC的压力。

Butterknife使用的是另一种方式,即APT(annotation processor tool)。这种方式是在编译阶段,根据annotation产生一些java class。然后在运行时,通过这些类完成注入。所以Butterknife只是替代了程序员写了一些code。

APT流程:

image.png

Butterknife的代码是通过javapoet产生的。

Annotation

因为Butterknife利用的是annotation,所以看一下注解的使用方式:
1、标准Annotation
标准的Annotation,我们经常用的@Override、@Deprecated、@SuppressWarnings,这些是java自带的几个Annotation,分别表示重写函数、不鼓励使用、忽略某项Warning。

2、元Annotation
元Annotation是指用来定义Annotation的Annotation,一般我们自定义Annotation时就会用到。主要包括以下几个:

@Retention 保留时间,可选值SOURCE(源码时),CLASS(编译时),RUNTIME(运行时),默认为CLASS,值为SOURCE大都为MarkAnnotation,这类Annotation大都用来校验,比如Override,Deprecated,SuppressWarnings

@Target可以用来修饰哪些程序元素,如TYPE,METHOD,CONSTRUCTOR,FIELD,PARAMETER等,未标注则表示可修饰所有

@Inherited是否可以被继承,默认为false

一个自定义注解示例

@Retention(CLASS)
@Target(FIELD)
public @interface BindView {
  /** View ID to which the field will be bound. */
  @IdRes int value();
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,028评论 25 709
  • 什么是注解(Annotation):Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和...
    九尾喵的薛定谔阅读 8,547评论 0 2
  • 你可以选择成为任何人,可是你最终还是成为了你自己。 故事的开始很简单,男孩梦到自己在金字塔下找到宝藏,就找个一个吉...
    步云鹏阅读 4,101评论 0 0
  • 在人像摄影中,即使是专业的模特在镜头前,也会对自己身体姿态没有把握此时,就需要摄影师根据实际效果,对模特的姿态进行...
    上流摄会阅读 13,856评论 1 2
  • 特条♞ “全能车”实现只交一份押金而使用多个品牌的原理:全能车大量购买个人的身份证信息,再去用这些信息实名认证注册...
    请万万喝水阅读 1,225评论 0 0

友情链接更多精彩内容