TinyKnifer:手工打造一个ButterKnife

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情

简介

ButteKnife的优点就是可以省略对控件操作的代码,比如通常我们实例化TextView控件的方法需要这么写:TextView mTextView = findViewById(R.id.tv);
而ButterKnife则不同,只需要用注解声明,并且bind当前Activity或Fragment类即可,如下图所示:
在这里插入图片描述
同样对TextView的点击等事件,ButterKnife也做了简化处理。

实现原理

前面说到ButterKnife省略了很多无用的重复的代码,那这些代码去哪了呢?
这些代码肯定是存在的,那到底在哪呢?
在这里插入图片描述
我们发现,在build的apt目录下面有个生成的文件里面,包含了mTextView控件,然后找到对应的ViewFinder:
在这里插入图片描述
发现这个ViewFinder功能就是通过findViewById来找到这个mTextView控件对应的资源文件id并对其实例化;
所以,ButterKnife的原理就是在App构建的时候,通过找到每个Activity或者Fragment里面注解的变量,动态生成一些Java文件,这些Java文件里面包含了我们所需要实例化的控件,以及实例化控件的方法,在App运行的时候,加载这些生成的Java类,这样就完成了控件实例化的过程。

手写一个ButterKnife

通过前面ButterKnife的实现原理了解,我们这边归纳一下如果自己想要打造一个类似ButterKnife的框架,我们需要用到哪些功能呢?

  1. 注解(Annotation)
    注解的作用就是标明哪些控件需要框架帮我们自动生成实例化(如findViewById)的代码;
  2. JavaPoet(APT)
    JavaPoet的作用是生成Java文件。我们可以根据JavaPoet的语法规则,手动构建java文件的内容,然后由JavaPoet生成对应的Java文件。
    关于JavaPoet的详细介绍,参考:https://github.com/square/javapoet
    这里我们需要写一个类extends AbstractProcessor,类名是什么无所谓。
    另外AbstractProcessor的调试需要自己监控端口,在Build的时候触发调试跟踪。

优点

  1. 通过生成Java文件实现,而不是反射实现,不影响运行效率;
  2. 减少代码量,通过自动生成的代码帮我们完成,提升阅读代码和开发的效率;

git地址

https://github.com/ddnosh/android-tiny-knifer

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值