微信号:jszj2014215

介绍:主要分享移动互联网的相关产品和资讯,关注你将学习到更多,在互联网的当下你会赚更多的钱...

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

2017-01-02 09:44 Android技术之家

特点

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等。

更新日志:

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

 

来自:http://www.jianshu.com/p/6ccfa7b50f0e

 


 
Android技术之家 更多文章 元旦快乐 嫁给程序员的1314好处 Android 开源或分享的国外开发者及公司 为什么跳槽加薪会比内部调薪要高? Android WebView硬件加速渲染网页UI的过程分析
猜您喜欢 五大常用算法之四:回溯法 创业团队如何管理密码? 论长尾词 Python 实现的随机森林 论架构师的自我修养