AndroidAnnotations是一个开源框架,旨在加快Android开发的效率。经过使用它开放出来的注解api,你差点儿可使用在不论什么地方, 大大的下降了无关痛痒的代码量,让开发人员能够抽身其外,有足够的时间精力关注在真正的业务逻辑上面。而且经过简洁你的代码,也提升了代码的稳定性和后期的维护成本。下面AndroidAnnotations简称为AAandroid
可能会有人提出异议了,咱们移动设备的性能,不比后台server拥有充足的内存和运算能力。当大量的使用注解的时候,会不会对APP的形成什么不良的影响,会不会影响到APP的运行性能?在这里先明白的声明,AA不会给APP带来不论什么反作用,相反它强大易用的api能为你带来史无前例的编程体验。git
眼下主流的注解框架有xUtils、ButterKnife、Dragger和Roboguice,它们的实现原理都是一致的,都是经过反射机制实现的。经过在Runtime运行期去反射类中带有注解的Field和Method,而后再去运行注解相相应的逻辑代码。你们都知道反射机制是在APP的运行期运行的,会形成运行的效率降低,运行时间变长的缺点。当在咱们APP中大量的使用基于反射的注解,会严重影响到性能。但是AA的实现的逻辑并不是基于此。github
AA工做的原理事实上也很是easy,它经过使用jdk 1.6引入的Java Annotation Processing Tool,编程
在编译器中加了一层额外的本身主动编译步骤,用来生成基于你源代码的代码。生成的代码是你源代码的直接子类,而且本身主动生成的类的名称就是父类名称后面加个下划线。比方使用了@EActivity注解的MyActivity,AA都会本身主动帮你生成一个名为MyActivity_的类。使用AA的注解在编译期间就已经本身主动生成了相应的子类,执行期执行的事实上就是这个子类,因此说AA的使用不会给APP的执行性能形成负面影响。api
AA开发环境搭建:右键=>Properties=>Java Compiler => Annotation Processing => Factory Path。微信
如下咱们经过演示样例来简单了解这个强大的框架,主要介绍一些常用的注解。框架
1、组件的注解异步
@EActivity这个注解是用来修饰Activity的,向Activity注入布局,也可以设置页面的样式为全屏、无Title。这些使用具备实意的注解来实现,是否是很是方便呀。对于其它的组件支持也是至关简单的,如@EService、@EReceiver、@EProvider、@EApplication、@EApplication、@EFragment。同一时候也能修饰本身定义控件,注解为@EView、@EViewGroup。支持是否是至关全面。ide
2、资源引用的注解布局
有了AA,各类让人烦躁的findViewById今后一去再也不返了,你可以简单的使用@ViewById去绑定布局里面的控件,假设你的变量名和控件的id值一致,连id的指向也可省去。而且在注解中不写id的状况下,假设编译器在R文件里找不到相应变量id名的时候,编译器也会给你提示,很是是友好。
同一时候你要是想在成员变量中引用资源的话,仅仅要在变量上增长相应的注解修饰就可以了,相同的假设变量名称和资源id一致的时候,id就可省去。支持所有的资源文件,所有的。
假设你想获取系统服务,仅仅要在你的变量前加上@SystemService注解。
获取Intent中传递的值,加上@Extra注解,同一时候容错性很是好,假设接收不到这个key相应的value,也没问题,你可以设置默认值。再有就是强转失败也不会形成crash,比方传递的是个int值,接收的时候是个String,也没有问题,仅仅是接收失败罢了。
很是强大有木有,修饰成员变量的注解主要用来解决它们初始化的问题,作到声明即初始化,拿来就能够用的功能。还有很是多属性,就不一一介绍了。
3、事件绑定注解
AA支持基本所有的原生事件的绑定,演示样例中展现的是常见的三种。简单的一个事件注解加上一个监听的控件id,就能完毕曾经要作的复杂的事件绑定呀,内部类实现呀等。而且方法名可以随意定制,假设方法名与控件的id一致,注解中的id也可省去,相同假设匹配不上的话,编译器也编译只是的。方法的參数列表也是可以本身定义的,当需要參数的时候,就把原生监听方法的參数列表拉过来就可以直接使用了。其它常用的还有@TextChange、@ItemClick、@SeekBarProgressChange。
4、异步线程与UI线程的交互
当View相关的成员变量初始化完成后,会调用拥有@AfterViews注解的方法,你可以在里面初始化一些界面控件等。假设其它的成员变量处事完成,就会调用@AfterInject。
比方大多数应用的逻辑是这种,初始化界面以后,就发起耗时的数据请求,而后解析获取到的数据,再设置到界面上。通常的涉及UI线程与异步任务交互的时候,相对都比較麻烦一些。让咱们看下AA是怎样实现的。
很是easy吧,UI线程运行的方法加个@UiThread,异步线程方法加个@Background,二者的交互就是方法直接的相互调用,其它的你不用关心,一切的实现都是AA的编译器去本身主动生成交互的代码。交互的过程,全然没有在运行异步的感受,不用再使用Handler去发送接收Message了。两个注解就把曾经一堆的代码实现的功能给实现了,真心给个最大的赞。
5、Rest API
在AA中也支持Rest API,而且支持所有的HTTP请求方法。如下演示的是一个GET请求。
定义一个请求的接口,而后就可以直接使用了,不需要本身再去实现。这个跟公司后台接口设计紧密相关,假设你公司接口交互都是Rest风格的话,你就重写下,好好体验AA的魅力吧。
写在最后:AndroidAnnotations功能强大,是注解框架中当之无愧的王者,灵活的API大大的提升了开发的效率,减小维护的成本。假设说它有什么弊端,我仅仅能说NO,它没有弊端。假设硬要来一个的话,也仅仅能是它的注解比較多,熟悉需要一段时间,假设整个开发团队技术迁移过来的话,前期技术成本稍高。但是所谓砍柴不误磨刀功,仍是不能归结为一个弊端。AA还有很是多强大有用的功能,限于篇幅就不展开说了,本身去探索吧。
好了,今天的干货都到此为止。
AA 地址 : https://github.com/excilys/androidannotations
假设认为对你有所帮助,欢迎你们订阅个人微信公众帐号——Android干货分享(ID:android_share)。如下是微信的二维码,为你提供及时高质的Android干货。技术交流QQ群:318588906,欢迎你们加群,共同探讨下Android和Java技术,一块儿壮大咱们的微信干货分享社区。