安卓AOP实战:APT打造极简路由

96
North_2016
2016.12.31 22:01* 字数 1048

特点:
1、0个类0行代码(除了apt及生成的仅仅一个类的代码)
2、0反射0性能损耗,基于编译期间注解处理器
3、支持任何类型的参数传递,没有原生Intent的数据大小限制
4、支持页面元素共享的转场动画

用法

那么,既然敢说极简,到底有多简单呢,来看看用法:


目标Activity注解


1、@Router(C.USER_INFO)注解参数 USER_INFO = "userInfo"; 就是当前页面的actionName简称。

2、@Extra(C.HEAD_DATA)注解标注上个界面传进来的参数user信息,注解内的值就是取值时的key。

3、@SceneTransition(C.TRANSLATE_VIEW)注解标注上个界面传过来的共享元素转场动画的View。

除了这个注解 ,就没有其他任何代码了。

使用时,也就一句话:

TRouter.go(C.USER_INFO, new ExtraData(C.HEAD_DATA, SpUtil.getUser()).build(), im_face);

对于不传参的就更简单了:

TRouter.go(C.FEED_BACK);

再看看之前的写法:

ActivityCompat.startActivity(mContext, new Intent(mContext, UserActivity.class) .putExtra(C.HEAD_DATA, SpUtil.getUser()) , ActivityOptionsCompat.makeSceneTransitionAnimation( (Activity) mContext, im_face, C.TRANSLATE_VIEW).toBundle());

于是,这些代码都可以注释掉删掉啦:


效果对比

当然,重构前的目标Activity里的初始化代码,也可以删掉啦:


删掉重构前的目标Activity里的初始化代码

为什么删掉呢,因为,这些极具规律性的代码,不需要手写,全部由APT自动生成了。

原理

来看看我们的TRouter里自动生成的页面跳转:


TRouter

以及自动给目标Activity自动初始化传参和转场View的代码:


自动初始化

整个TRouter的原理,就是让Apt帮我们写代码。

先根据注解整理出需要的信息:


RouterActivityModel

然后按照固定套路生成代码就可以了,例如:


APT生成代码

具体代码请看RouterProcessor。因为逻辑并不复杂,为了保持简洁,没有像ButterKnife那样针对每个目标单独生成代理类,直接生成全局的静态方法即可,只需要保证初始化赋值目标是Public即可,而ButterKnife的代理类实在同一个包名下,则没有这样的要求,但是ButterKnife的代理类的获取需要用反射,两种实现方式各有利弊吧。

好了 ,2016年最后一趟车即将到站了,所有代码在项目T-MVP

题外,TMVP一直在不断推翻,不断优化,不断重写,感兴趣的可以关注我的github看到最新的进展。TMVP全家桶现有TRecyclerView、TRouter、OkBus等。

QQ群:AndroidMVP 555343041

更新日志:

2017/1/31:AOP新增SysPermissionAspect支持动态申请系统权限切片,轻松适配6.0+

2017/1/27:AOP新增DbRealmAspect支持Realm数据库,数据库突破你想像的简单(年夜特供)

2017/1/8: 使用Apt封装Retrofit生成ApiFactory替换掉所有的Repository,狂删代码

2017/1/7: 使用DataBinding替换掉所有的ButterKnife,狂删代码

2017/1/6: 使用DataBinding替换掉所有的ViewHolder,狂删代码,从此迈向新时代

2016/12/30:使用Apt生成全局路由TRouter,更优雅的页面跳转,支持传递参数和共享view转场动画

2016/12/29:去掉BaseMultiVH新增VHSelector支持更完美的多ViewHolder

2016/12/28:使用Apt生成全局的ApiFactory替代所有的Model

2016/12/27:增加了BaseMultiVH扩展支持多类型的ViewHolder

2016/12/26:抽离CoreAdapterPresenter优化TRecyclerView

安卓AOP实战:面向切片编程

Android实用技巧之:用好泛型,少写代码

安卓AOP实战:APT打造极简路由

全局路由TRouter,更优雅的页面跳转

安卓AOP实战:Javassist强撸EventBus

加入OkBus,实现注解传递事件

安卓AOP三剑客:APT,AspectJ,Javassist

1、去掉所有反射>2、新增apt初始化工厂,替换掉了dagger2。>3、新增aop切片,处理缓存和日志

AndroidAOP